def compute_reference_profiles(self, imageset): """ Integrate the reflections """ from dials.algorithms.integration.integrator import frame_hist # Compute the partiality self.reflections.compute_partiality(self.experiments) # Get some info EPS = 1e-7 full_value = 0.997300203937 - EPS fully_recorded = self.reflections["partiality"] > full_value npart = fully_recorded.count(False) nfull = fully_recorded.count(True) select_ice = self.reflections.get_flags( self.reflections.flags.in_powder_ring) select_int = ~self.reflections.get_flags( self.reflections.flags.dont_integrate) nice = select_ice.count(True) nint = select_int.count(True) ntot = len(self.reflections) frame0, frame1 = imageset.get_scan().get_array_range() # Write some output logger.info(" Beginning integration job %d" % self.index) logger.info("") logger.info(" Frames: %d -> %d" % (frame0, frame1)) logger.info("") logger.info(" Number of reflections") logger.info(" Partial: %d" % npart) logger.info(" Full: %d" % nfull) logger.info(" In ice ring: %d" % nice) logger.info(" Integrate: %d" % nint) logger.info(" Total: %d" % ntot) logger.info("") # Print a histogram of reflections on frames if frame1 - frame0 > 1: logger.info( " The following histogram shows the number of reflections predicted" ) logger.info( " to have all or part of their intensity on each frame.") logger.info("") logger.info( frame_hist(self.reflections["bbox"].select(select_int), prefix=" ", symbol="*")) logger.info("") # Construct the mask algorithm compute_mask = MaskCalculatorFactory.create(self.experiments, self.params) # Construct the background algorithm compute_background = BackgroundCalculatorFactory.create( self.experiments, self.params) # Construct the intensity algorithm compute_reference = ReferenceCalculatorFactory.create( self.experiments, self.params) # Call the multi threaded integrator reference_calculator = MultiThreadedReferenceProfiler( reflections=self.reflections, imageset=imageset, compute_mask=compute_mask, compute_background=compute_background, compute_reference=compute_reference, logger=Logger(logger), nthreads=self.params.integration.mp.nproc, buffer_size=self.params.integration.block.size, use_dynamic_mask=self.params.integration.use_dynamic_mask, debug=self.params.integration.debug.output, ) # Assign the reflections self.reflections = reference_calculator.reflections() # Assign the reference profiles self.reference = compute_reference # Write some log output fmt = "Used %d / %d reflections to create reference profiles" dont_integrate = self.reflections.get_flags( self.reflections.flags.dont_integrate) used_in_modelling = self.reflections.get_flags( self.reflections.flags.used_in_modelling) n_tot = dont_integrate.count(False) n_mod = (used_in_modelling & ~dont_integrate).count(True) logger.info("") logger.info(fmt % (n_mod, n_tot))
def integrate(self, imageset): ''' Integrate the reflections ''' from dials.algorithms.integration.integrator import frame_hist # Compute the partiality self.reflections.compute_partiality(self.experiments) # Get some info EPS = 1e-7 full_value = (0.997300203937 - EPS) fully_recorded = self.reflections['partiality'] > full_value npart = fully_recorded.count(False) nfull = fully_recorded.count(True) select_ice = self.reflections.get_flags(self.reflections.flags.in_powder_ring) select_int = ~self.reflections.get_flags(self.reflections.flags.dont_integrate) nice = select_ice.count(True) nint = select_int.count(True) ntot = len(self.reflections) frame0, frame1 = imageset.get_scan().get_array_range() # Write some output logger.info(" Beginning integration job %d" % self.index) logger.info("") logger.info(" Frames: %d -> %d" % (frame0, frame1)) logger.info("") logger.info(" Number of reflections") logger.info(" Partial: %d" % npart) logger.info(" Full: %d" % nfull) logger.info(" In ice ring: %d" % nice) logger.info(" Integrate: %d" % nint) logger.info(" Total: %d" % ntot) logger.info("") # Print a histogram of reflections on frames if frame1 - frame0 > 1: logger.info(' The following histogram shows the number of reflections predicted') logger.info(' to have all or part of their intensity on each frame.') logger.info('') logger.info(frame_hist(self.reflections['bbox'].select(select_int), prefix=' ', symbol='*')) logger.info('') # Construct the mask algorithm compute_mask = MaskCalculatorFactory.create( self.experiments, self.params) # Construct the background algorithm compute_background = BackgroundCalculatorFactory.create( self.experiments, self.params) # Construct the intensity algorithm compute_intensity = IntensityCalculatorFactory.create( self.experiments, self.reference, self.params) # Call the multi threaded integrator integrator = MultiThreadedIntegrator( reflections = self.reflections, imageset = imageset, compute_mask = compute_mask, compute_background = compute_background, compute_intensity = compute_intensity, logger = Logger(logger), nthreads = self.params.integration.mp.nproc, buffer_size = self.params.integration.block.size, use_dynamic_mask = self.params.integration.use_dynamic_mask, debug = self.params.integration.debug.output) # Assign the reflections self.reflections = integrator.reflections()