def run(self): from dials.algorithms.integration.integrator import ReflectionManager from dials.algorithms.integration.integrator import JobList from dials.array_family import flex jobs = JobList() jobs.add((0, 1), self.array_range, self.block_size) # Create the executor executor = ReflectionManager(jobs, self.reflections) # Ensure the tasks make sense jobs = [executor.job(i) for i in range(len(executor))] assert (len(executor) == 12) assert (not executor.finished()) assert (len(jobs) == 12) assert (jobs[0].frames() == (0, 20)) assert (jobs[1].frames() == (10, 30)) assert (jobs[2].frames() == (20, 40)) assert (jobs[3].frames() == (30, 50)) assert (jobs[4].frames() == (40, 60)) assert (jobs[5].frames() == (50, 70)) assert (jobs[6].frames() == (60, 80)) assert (jobs[7].frames() == (70, 90)) assert (jobs[8].frames() == (80, 100)) assert (jobs[9].frames() == (90, 110)) assert (jobs[10].frames() == (100, 120)) assert (jobs[11].frames() == (110, 130)) # Get the task specs data0 = executor.split(0) data1 = executor.split(1) data2 = executor.split(2) data3 = executor.split(3) data4 = executor.split(4) data5 = executor.split(5) data6 = executor.split(6) data7 = executor.split(7) data8 = executor.split(8) data9 = executor.split(9) data10 = executor.split(10) data11 = executor.split(11) assert (len(data0) == len(self.processed[0])) assert (len(data1) == len(self.processed[1])) assert (len(data2) == len(self.processed[2])) assert (len(data3) == len(self.processed[3])) assert (len(data4) == len(self.processed[4])) assert (len(data5) == len(self.processed[5])) assert (len(data6) == len(self.processed[6])) assert (len(data7) == len(self.processed[7])) assert (len(data8) == len(self.processed[8])) assert (len(data9) == len(self.processed[9])) assert (len(data10) == len(self.processed[10])) assert (len(data11) == len(self.processed[11])) # Add some results data0["data"] = flex.double(len(data0), 1) data1["data"] = flex.double(len(data1), 2) data2["data"] = flex.double(len(data2), 3) data3["data"] = flex.double(len(data3), 4) data4["data"] = flex.double(len(data4), 5) data5["data"] = flex.double(len(data5), 6) data6["data"] = flex.double(len(data6), 7) data7["data"] = flex.double(len(data7), 8) data8["data"] = flex.double(len(data8), 9) data9["data"] = flex.double(len(data9), 10) data10["data"] = flex.double(len(data10), 11) data11["data"] = flex.double(len(data11), 12) # Accumulate the data again assert (not executor.finished()) executor.accumulate(0, data0) executor.accumulate(1, data1) executor.accumulate(2, data2) executor.accumulate(3, data3) executor.accumulate(4, data4) executor.accumulate(5, data5) executor.accumulate(6, data6) executor.accumulate(7, data7) executor.accumulate(8, data8) executor.accumulate(9, data9) executor.accumulate(10, data10) executor.accumulate(11, data11) assert (executor.finished()) # Get results and check they're as expected data = executor.data() result = data["data"] bbox = data["bbox"] for i in range(len(self.processed)): for j in range(len(self.processed[i])): assert (result[self.processed[i][j]] == i + 1) # Test passed print 'OK'
def test_reflection_manager(): from dials.array_family import flex reflections = flex.reflection_table() reflections["panel"] = flex.size_t() reflections["bbox"] = flex.int6() reflections["miller_index"] = flex.miller_index() reflections["s1"] = flex.vec3_double() reflections["xyzcal.px"] = flex.vec3_double() reflections["xyzcal.mm"] = flex.vec3_double() reflections["entering"] = flex.bool() reflections["id"] = flex.int() reflections["flags"] = flex.size_t() width = 1000 height = 1000 nrefl = 10000 array_range = (0, 130) block_size = 20 block_overlap = 10 random.seed(0) processed = [[] for i in range(12)] for i in range(nrefl): x0 = random.randint(0, width - 10) y0 = random.randint(0, height - 10) zs = random.randint(2, 9) x1 = x0 + random.randint(2, 10) y1 = y0 + random.randint(2, 10) for k, j in enumerate( [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]): m = k + i * 12 pos = random.choice(["left", "right", "centre"]) if pos == "left": z0 = j - zs z1 = j elif pos == "right": z0 = j z1 = j + zs else: z0 = j - zs // 2 z1 = j + zs // 2 bbox = (x0, x1, y0, y1, z0, z1) reflections.append({ "panel": random.randint(0, 1), "bbox": bbox, "flags": flex.reflection_table.flags.reference_spot, }) processed[k].append(m) # Add reflection to ignore # zc = random.choice([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]) # z0 = zc - 11 # z1 = zc + 11 # bbox = (x0, x1, y0, y1, z0, z1) # reflections.append({ # "panel" : randint(0,1), # "bbox" : bbox, # "flags" : flex.reflection_table.flags.reference_spot # }) from dials.algorithms.integration.integrator import JobList, ReflectionManager jobs = JobList() jobs.add((0, 1), array_range, block_size, block_overlap) # Create the executor executor = ReflectionManager(jobs, reflections) # Ensure the tasks make sense jobs = [executor.job(i) for i in range(len(executor))] assert len(executor) == 12 assert not executor.finished() assert len(jobs) == 12 assert jobs[0].frames() == (0, 20) assert jobs[1].frames() == (10, 30) assert jobs[2].frames() == (20, 40) assert jobs[3].frames() == (30, 50) assert jobs[4].frames() == (40, 60) assert jobs[5].frames() == (50, 70) assert jobs[6].frames() == (60, 80) assert jobs[7].frames() == (70, 90) assert jobs[8].frames() == (80, 100) assert jobs[9].frames() == (90, 110) assert jobs[10].frames() == (100, 120) assert jobs[11].frames() == (110, 130) # Get the task specs data0 = executor.split(0) data1 = executor.split(1) data2 = executor.split(2) data3 = executor.split(3) data4 = executor.split(4) data5 = executor.split(5) data6 = executor.split(6) data7 = executor.split(7) data8 = executor.split(8) data9 = executor.split(9) data10 = executor.split(10) data11 = executor.split(11) assert len(data0) == len(processed[0]) assert len(data1) == len(processed[1]) assert len(data2) == len(processed[2]) assert len(data3) == len(processed[3]) assert len(data4) == len(processed[4]) assert len(data5) == len(processed[5]) assert len(data6) == len(processed[6]) assert len(data7) == len(processed[7]) assert len(data8) == len(processed[8]) assert len(data9) == len(processed[9]) assert len(data10) == len(processed[10]) assert len(data11) == len(processed[11]) # Add some results data0["data"] = flex.double(len(data0), 1) data1["data"] = flex.double(len(data1), 2) data2["data"] = flex.double(len(data2), 3) data3["data"] = flex.double(len(data3), 4) data4["data"] = flex.double(len(data4), 5) data5["data"] = flex.double(len(data5), 6) data6["data"] = flex.double(len(data6), 7) data7["data"] = flex.double(len(data7), 8) data8["data"] = flex.double(len(data8), 9) data9["data"] = flex.double(len(data9), 10) data10["data"] = flex.double(len(data10), 11) data11["data"] = flex.double(len(data11), 12) # Accumulate the data again assert not executor.finished() executor.accumulate(0, data0) executor.accumulate(1, data1) executor.accumulate(2, data2) executor.accumulate(3, data3) executor.accumulate(4, data4) executor.accumulate(5, data5) executor.accumulate(6, data6) executor.accumulate(7, data7) executor.accumulate(8, data8) executor.accumulate(9, data9) executor.accumulate(10, data10) executor.accumulate(11, data11) assert executor.finished() # Get results and check they're as expected data = executor.data() result = data["data"] for i in range(len(processed)): for j in range(len(processed[i])): assert result[processed[i][j]] == i + 1
def run(self): from dials.algorithms.integration.integrator import ReflectionManager from dials.algorithms.integration.integrator import JobList from dials.array_family import flex jobs = JobList() jobs.add( (0, 1), self.array_range, self.block_size) # Create the executor executor = ReflectionManager( jobs, self.reflections) # Ensure the tasks make sense jobs = [executor.job(i) for i in range(len(executor))] assert(len(executor) == 12) assert(not executor.finished()) assert(len(jobs) == 12) assert(jobs[0].frames() == (0, 20)) assert(jobs[1].frames() == (10, 30)) assert(jobs[2].frames() == (20, 40)) assert(jobs[3].frames() == (30, 50)) assert(jobs[4].frames() == (40, 60)) assert(jobs[5].frames() == (50, 70)) assert(jobs[6].frames() == (60, 80)) assert(jobs[7].frames() == (70, 90)) assert(jobs[8].frames() == (80, 100)) assert(jobs[9].frames() == (90, 110)) assert(jobs[10].frames() == (100, 120)) assert(jobs[11].frames() == (110, 130)) # Get the task specs data0 = executor.split(0) data1 = executor.split(1) data2 = executor.split(2) data3 = executor.split(3) data4 = executor.split(4) data5 = executor.split(5) data6 = executor.split(6) data7 = executor.split(7) data8 = executor.split(8) data9 = executor.split(9) data10 = executor.split(10) data11 = executor.split(11) assert(len(data0) == len(self.processed[0])) assert(len(data1) == len(self.processed[1])) assert(len(data2) == len(self.processed[2])) assert(len(data3) == len(self.processed[3])) assert(len(data4) == len(self.processed[4])) assert(len(data5) == len(self.processed[5])) assert(len(data6) == len(self.processed[6])) assert(len(data7) == len(self.processed[7])) assert(len(data8) == len(self.processed[8])) assert(len(data9) == len(self.processed[9])) assert(len(data10) == len(self.processed[10])) assert(len(data11) == len(self.processed[11])) # Add some results data0["data"] = flex.double(len(data0), 1) data1["data"] = flex.double(len(data1), 2) data2["data"] = flex.double(len(data2), 3) data3["data"] = flex.double(len(data3), 4) data4["data"] = flex.double(len(data4), 5) data5["data"] = flex.double(len(data5), 6) data6["data"] = flex.double(len(data6), 7) data7["data"] = flex.double(len(data7), 8) data8["data"] = flex.double(len(data8), 9) data9["data"] = flex.double(len(data9), 10) data10["data"] = flex.double(len(data10), 11) data11["data"] = flex.double(len(data11), 12) # Accumulate the data again assert(not executor.finished()) executor.accumulate(0, data0) executor.accumulate(1, data1) executor.accumulate(2, data2) executor.accumulate(3, data3) executor.accumulate(4, data4) executor.accumulate(5, data5) executor.accumulate(6, data6) executor.accumulate(7, data7) executor.accumulate(8, data8) executor.accumulate(9, data9) executor.accumulate(10, data10) executor.accumulate(11, data11) assert(executor.finished()) # Get results and check they're as expected data = executor.data() result = data["data"] bbox = data["bbox"] for i in range(len(self.processed)): for j in range(len(self.processed[i])): assert(result[self.processed[i][j]] == i+1) # Test passed print 'OK'