def module_or_slice_from_http_request(request): # edit out data from list tags = {} for item in request.keys(): assert len(request[item]) == 1 #list with one element tags[item] = request[item][0] if len(tags[item]) < 1000: #short items could be converted to numbers try: tags[item] = float(tags[item]) if tags[item] == round(tags[item], 0): tags[item] = int(tags[item]) except Exception: pass #print "posted data types",item, type(tags[item]), tags[item] # tags dictionary is now conditioned as to type tags_class = attributes_from_dict(tags) #Vendor selector. if tags["vendortype"].lower().find("adsc") >= 0: P = ADSCModule() elif tags["vendortype"].lower().find("pilatus") >= 0: P = PilatusSlice() P.moduleindex = tags["moduleindex"] P.object = StringIO(tags["adsc_data"]) P.copy_common_attributes_from_parent_instance(tags_class) P.parameters = {} for item in [ 'DISTANCE', 'PHI', 'WAVELENGTH', 'TWOTHETA', 'OSC_RANGE', 'CCD_IMAGE_SATURATION', 'OSC_START', 'DETECTOR_SN', 'PIXEL_SIZE', 'SIZE1', 'SIZE2', 'BEAM_CENTER_X', 'BEAM_CENTER_Y' ]: P.parameters[item] = tags[item] from iotbx.detectors.beam_center_convention import convert_beam_instrument_to_imageblock convert_beam_instrument_to_imageblock(P, P.beam_center_convention) P.slice_callback = P.slice_callback_with_high_performance_http_data return P
def module_or_slice_from_http_request(request): # edit out data from list tags = {} for item in request.keys(): assert len(request[item])==1 #list with one element tags[item]=request[item][0] if len(tags[item]) < 1000: #short items could be converted to numbers try: tags[item] = float(tags[item]) if tags[item]==round(tags[item],0): tags[item]= int(tags[item]) except Exception: pass #print "posted data types",item, type(tags[item]), tags[item] # tags dictionary is now conditioned as to type tags_class = attributes_from_dict(tags) #Vendor selector. if tags["vendortype"].lower().find("adsc")>=0: P = ADSCModule() elif tags["vendortype"].lower().find("pilatus")>=0: P = PilatusSlice() P.moduleindex = tags["moduleindex"] P.object = StringIO.StringIO(tags["adsc_data"]) P.copy_common_attributes_from_parent_instance(tags_class) P.parameters = {} for item in ['DISTANCE', 'PHI', 'WAVELENGTH', 'TWOTHETA', 'OSC_RANGE', 'CCD_IMAGE_SATURATION', 'OSC_START', 'DETECTOR_SN', 'PIXEL_SIZE', 'SIZE1','SIZE2','BEAM_CENTER_X','BEAM_CENTER_Y' ]: P.parameters[item] = tags[item] from iotbx.detectors.beam_center_convention import convert_beam_instrument_to_imageblock convert_beam_instrument_to_imageblock(P,P.beam_center_convention) P.slice_callback = P.slice_callback_with_high_performance_http_data return P
def site_modifications(self,imageobject,filenameobject): from iotbx.detectors.context.config_detector\ import beam_center_convention_from_image_object beam_center_convention = beam_center_convention_from_image_object(imageobject,self.phil_params) #we may elect to override the beam position globally for LABELIT. #Case I. The user has provided a tuple of floats, superceding all else if self.phil_params.autoindex_override_beam != None: imageobject.parameters['BEAM_CENTER_X'],\ imageobject.parameters['BEAM_CENTER_Y']=\ self.phil_params.autoindex_override_beam imageobject.beam_center_reference_frame = "imageblock" #Case II. An XY convention has been defined. elif beam_center_convention != 0: convert_beam_instrument_to_imageblock(imageobject,beam_center_convention) if self.phil_params.autoindex_override_distance != None: imageobject.parameters['DISTANCE']=self.phil_params.autoindex_override_distance if self.phil_params.autoindex_override_wavelength != None: imageobject.parameters['WAVELENGTH']=self.phil_params.autoindex_override_wavelength if self.phil_params.autoindex_override_deltaphi != None: if self.verbose: print "Overriding deltaphi not fully supported: contact authors" print "Altering deltaphi",(filenameobject.number-1)*self.phil_params.autoindex_override_deltaphi imageobject.parameters['OSC_RANGE']=self.phil_params.autoindex_override_deltaphi imageobject.parameters['OSC_START']=(filenameobject.number-1)*self.phil_params.autoindex_override_deltaphi # override twotheta angle if self.phil_params.autoindex_override_twotheta != None: imageobject.parameters['TWOTHETA']=\ self.phil_params.autoindex_override_twotheta if self.phil_params.image_specific_osc_start != None: imageobject.parameters['OSC_START']= \ eval("(%s)(%d)"%( self.phil_params.image_specific_osc_start,filenameobject.number)) #take care of unbinned Quantum 315 if (self.phil_params.distl_permit_binning and \ imageobject.size1 > 4000 and imageobject.vendortype=="ADSC") or \ self.phil_params.distl_force_binning: imageobject.setBin(2) self.phil_params.distl.minimum_spot_area = min( self.phil_params.distl.minimum_spot_area, self.phil_params.distl_binned_image_spot_size) if imageobject.vendortype=="MARCCD": #This section corrects for the fact that ESRF writes the mar ccd header # with beam center in mm instead of pixels. detector_center_in_mm = 0.5*imageobject.size1*imageobject.pixel_size one_tenth_error = 0.1*detector_center_in_mm #offset between given beam and detector center import math def distance(a,b): return math.sqrt((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])) offset1=distance( (detector_center_in_mm,detector_center_in_mm), (imageobject.beamx,imageobject.beamy) ) if offset1>one_tenth_error: newx = imageobject.beamx/imageobject.pixel_size newy = imageobject.beamy/imageobject.pixel_size #offset between corrected beam and detector center offset2=distance( (detector_center_in_mm,detector_center_in_mm), (newx,newy) ) if offset2<one_tenth_error: imageobject.parameters['BEAM_CENTER_X'] = newx imageobject.parameters['BEAM_CENTER_Y'] = newy #Furthermore the x and y are transposed in the one example we've been given convert_beam_instrument_to_imageblock(imageobject, beam_center_convention,force=True) if self.verbose: print "Mar CCD image appears to have beam center %.2f %.2f in mm instead of pixels"%( imageobject.beamx,imageobject.beamy)
def set_beam_center_convention(self, beam_center_convention): from iotbx.detectors.beam_center_convention import convert_beam_instrument_to_imageblock convert_beam_instrument_to_imageblock(self, beam_center_convention)
def set_beam_center_convention(self,beam_center_convention): from iotbx.detectors.beam_center_convention import convert_beam_instrument_to_imageblock convert_beam_instrument_to_imageblock(self,beam_center_convention)
def site_modifications(self,imageobject,filenameobject): from iotbx.detectors.context.config_detector\ import beam_center_convention_from_image_object beam_center_convention = beam_center_convention_from_image_object(imageobject,self.phil_params) #we may elect to override the beam position globally for LABELIT. #Case I. The user has provided a tuple of floats, superceding all else if self.phil_params.autoindex_override_beam != None: imageobject.parameters['BEAM_CENTER_X'],\ imageobject.parameters['BEAM_CENTER_Y']=\ self.phil_params.autoindex_override_beam imageobject.beam_center_reference_frame = "imageblock" #Case II. An XY convention has been defined. elif beam_center_convention != 0: convert_beam_instrument_to_imageblock(imageobject,beam_center_convention) if self.phil_params.autoindex_override_distance != None: imageobject.parameters['DISTANCE']=self.phil_params.autoindex_override_distance if self.phil_params.autoindex_override_wavelength != None: imageobject.parameters['WAVELENGTH']=self.phil_params.autoindex_override_wavelength if self.phil_params.autoindex_override_deltaphi != None: if self.verbose: print "Overriding deltaphi not fully supported: contact authors" print "Altering deltaphi",(filenameobject.number-1)*self.phil_params.autoindex_override_deltaphi imageobject.parameters['OSC_RANGE']=self.phil_params.autoindex_override_deltaphi imageobject.parameters['OSC_START']=(filenameobject.number-1)*self.phil_params.autoindex_override_deltaphi # override twotheta angle if self.phil_params.autoindex_override_twotheta != None: imageobject.parameters['TWOTHETA']=\ self.phil_params.autoindex_override_twotheta if self.phil_params.image_specific_osc_start != None: imageobject.parameters['OSC_START']= \ eval("(%s)(%d)"%( self.phil_params.image_specific_osc_start,filenameobject.number)) #take care of unbinned Quantum 315 if (self.phil_params.distl_permit_binning and \ imageobject.size1 > 4000) or \ self.phil_params.distl_force_binning: imageobject.setBin(2) self.phil_params.distl.minimum_spot_area = min( self.phil_params.distl.minimum_spot_area, self.phil_params.distl_binned_image_spot_size) if imageobject.vendortype=="MARCCD": #This section corrects for the fact that ESRF writes the mar ccd header # with beam center in mm instead of pixels. detector_center_in_mm = 0.5*imageobject.size1*imageobject.pixel_size one_tenth_error = 0.1*detector_center_in_mm #offset between given beam and detector center import math def distance(a,b): return math.sqrt((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1])) offset1=distance( (detector_center_in_mm,detector_center_in_mm), (imageobject.beamx,imageobject.beamy) ) if offset1>one_tenth_error: newx = imageobject.beamx/imageobject.pixel_size newy = imageobject.beamy/imageobject.pixel_size #offset between corrected beam and detector center offset2=distance( (detector_center_in_mm,detector_center_in_mm), (newx,newy) ) if offset2<one_tenth_error: imageobject.parameters['BEAM_CENTER_X'] = newx imageobject.parameters['BEAM_CENTER_Y'] = newy #Furthermore the x and y are transposed in the one example we've been given convert_beam_instrument_to_imageblock(imageobject, beam_center_convention,force=True) if self.verbose: print "Mar CCD image appears to have beam center %.2f %.2f in mm instead of pixels"%( imageobject.beamx,imageobject.beamy)