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
Beispiel #3
0
  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)
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
  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)