[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Reply to: [list | sender only]
Re: [Imgcif-l] Fwd: Re: Cylindrical detectors
- To: "The Crystallographic Binary File and its imgCIF application to image data" <imgcif-l@iucr.org>
- Subject: Re: [Imgcif-l] Fwd: Re: Cylindrical detectors
- From: "James Hester" <jamesrhester@gmail.com>
- Date: Thu, 2 Aug 2007 15:17:32 +1000
- In-Reply-To: <a06230907c2d6eda2694e@192.168.2.104>
- References: <46B030BE020000C80001F2E3@hermes.dowling.edu><a06230907c2d6eda2694e@192.168.2.104>
A few comments from someone not practiced in reading imgCIF axis definitions: 1. Why is ELEMENT_ANGLE dependent on ELEMENT_CAXIS? If the two axes are locally orthogonal, the value of ELEMENT_ANGLE is independent of the value that CAXIS takes. I would expect it to be dependent on DETECTOR_PITCH only. I also don't understand the reasoning in your introductory comment where this dependence means that no offset needs to be specified for ELEMENT_ANGLE - surely if the detector is concentric around the sample position the only ELEMENT_ANGLE vector that makes sense is [1,0,0] with no offset? 2. I agree that the _axis_rotation_origin item is a good idea. On 8/2/07, Herbert J. Bernstein <yaya@bernstein-plus-sons.com> wrote: > > Dear Colleagues, > > Here is a draft of a commented answer to the question > James Hester raised about cylindrical detectors. In > putting this together it became clear that we really > should add another category, AXIS_ROTATION_ORIGIN, > to explicitly specify the direction at which a rotation > axis at its zero setting points. > > While such a new category can be avoided by careful use > of implicit rules for the cylindrical detector > element axes, the question comes up when dealing > with detector pitch or goniometer chi. I think we > should take this opportunity to deal with the issue. > > Comments, corrections and suggestions would be > appreciated. > > # This is an example of the axis setup for a cylindrical > # detector element. The axis of the cylinder run parallel > # the the X-axis (the principal goniometer axis). The > # radius of the cylinder is 573 mm. The pixels on > # the surface of the cylinder are .1 mm by .1 mm. The > # detector element has 2000 pixels along the direction > # of the cylinder axis and 4000 pixels along the > # circumference of a slice through the cylinder. In > # other words, the detector element is a 200 mm by > # 400 mm segment of the surface of the cylinder. > # The circumference of the cylinder is 2*pi*573 = > # 3600.265181. The means the each pixel is > # .1 mm by .00999926344 degrees. If we place the > # origin of the detector element in the center of > # the pixel at the top left in terms of X and Y, > # i.e. half a pixel in from -1000 pixels left > # and 2000 pixels up, i.e. we need to start > # at -99.95 mm left and at 19.9935272482 degrees up. > # > # In order to define the axes for this detector, > # specify ELEMENT_CAXIS for the cylinder axis > # with the [1,0,0] vector starting at an offset > # of [-99.95,0,0]. Then we specify ELEMENT_ANGLE > # for the cylinder surface angle as dependent on > # ELEMENT_CAXIS. Because of the dependence, we > # do not specify any additional offset for the base > # of the ELEMENT_ANGLE axis. Finally we specify > # ELEMENT_RADIUS as dependent on ELEMENT_ANGLE. > # We specify this axis to that it points to the > # center of the origin pixel when all axes are > # at their zero settings, i.e. when the > # ELEMENT_RADIUS is pointing in the direction > # [0,0.341913983,-0.939731253]. > # > # While this means of implicitly specifying the > # direction of the zero setting of a rotation > # axis, is sufficient for this case, it is only > # workable when a another axis is specified > # as dependent on a rotation axis. To resolve > # the general case we propose to add a new > # category AXIS_ROTATION_ORIGIN to carry this > # information in general. > > loop_ > _axis.id > _axis.type #___ > _axis.equipment #___\___________ > _axis.depends_on #___|___________\____________ > _axis.vector[1] #___|___________|____________\______________ > _axis.vector[2] #___|___________|____________|______________\__ > _axis.vector[3] #___|___________|____________|______________|__\__ > _axis.offset[1] #___|___________|____________|______________|__|__\____ > _axis.offset[2] > #___|___________|____________|______________|__|__|____\__ > _axis.offset[3] > #___|___________|____________|______________|__|__|____|__\__ > # | | | | | | > | | \ > > ######################|###########|############|##############|##|##|####|##|##| > SOURCE general source . 0 0 1 > . . . > GRAVITY general gravity . 0 -1 0 > . . . > > ######################|###########|############|##############|##|##|####|##|##| > # | | | | | | > | | | > DETECTOR_Z translation detector . 0 0 -1 > 0 0 0 > DETECTOR_Y translation detector DETECTOR_Z 0 -1 0 > 0 0 0 > DETECTOR_PITCH rotation detector DETECTOR_Y 1 0 0 > 0 0 0 > # | | | | | | > | | | > ELEMENT_CAXIS translation detector DETECTOR_PITCH 1 0 0 > > -99.95 0 0 > ELEMENT_ANGLE rotation detector ELEMENT_CAXIS 1 0 0 > 0 0 0 > ELEMENT_RADIUS translation detector ELEMENT_ANGLE > 0 0.341913983 - > 0.93973125 > > 0 0 0 > > ######################|###########|############|##############|##|##|####|##|##| > > # We explicitly specify the direction of ELEMENT_CAXIS and > # DETECTOR_PITCH when they are at their zero settings. Note that > # we do not have an implicit rotation origin from a dependent axis for > # DETECTOR_PITCH. We need to give it explicitly. > > loop_ > _axis_rotation_origin.axis_id > _axis_rotation_origin.direction[0] #__ > _axis_rotation_origin.direction[1] #__\__________ > _axis_rotation_origin.direction[2] #__|__________\____________ > # | | \ > DETECTOR_PITCH 0 0 1 > ELEMENT_ANGLE 0 0.341913983 -0.93973125 > > > # We relate these axes to the pixels of data. To do this > # we use _array_structure_list and _array_structure_list_axis > # grouping ELEMENT_ANGLE and ELEMENT_RADIUS into a single axis_set > # effectively coupling them. ELEMENT_RADIUS is set to the > # constant value of 573 mm, and ELEMENT_ANGLE is stepped downwards > # from the top if the detector. Strictly speaking, we should > # not specify both _array_structure_list_axis.angular_pitch in mm > # and _array_structure_list_axis.angle_increment in degrees, > # but we have done so here to to provide a consistency check. > > loop_ > _array_structure_list.array_id > _array_structure_list.axis_set_id #___ > _array_structure_list.index #___\_______ > _array_structure_list.dimension #___|_______\___ > _array_structure_list.precedence #___|_______|___\__ > _array_structure_list.direction #___|_______|___|__\_____ > # | | | | \ > image_1 ELEMENT_CAXIS 1 2000 1 increasing > image_1 ELEMENT_ANGLE 2 4000 2 increasing > > > loop_ > _array_structure_list_axis.axis_set_id > _array_structure_list_axis.axis_id #_ > _array_structure_list_axis.displacement #_\ > _array_structure_list_axis.displacement_increment #_|_\ > _array_structure_list_axis.angular_pitch #_|__|__\ > _array_structure_list_axis.angle #_|__|__|_\_ > _array_structure_list_axis.angle_increment #_|__|__|_|_\____ > # _____________________________/ _/ | | | \ > # / __________/ ___/ | | | > # | / _____/ ____/ | | > # | | / / | | > ELEMENT_CAXIS ELEMENT_CAXIS 0 0.1 . . . > ELEMENT_ANGLE ELEMENT_ANGLE . . 0.1 0 > -.00999926344 > ELEMENT_ANGLE ELEMENT_RADIUS 573 0 . . . > > > > > At 7:05 AM -0400 8/1/07, Herbert J. Bernstein wrote: > >Date: Wed, 1 Aug 2007 07:05:16 -0400 (EDT) > >From: "Herbert J. Bernstein" <yaya@bernstein-plus-sons.com> > >To: The Crystallographic Binary File and its imgCIF application to > >image data <imgcif-l@iucr.org> > >Subject: Re: [Imgcif-l] Cylindrical detectors > > > >> Is it reasonable to use _array_structure_list_axis.angle_increment > instead > >> of displacement_increment? > > > >Yes > > > >> Note that the radius of curvature of the detector is implied by the > offset > >> of the other detector axis, and once this is given the pixel > displacement > >> increment can be converted to degrees. > > > >I suspect it would be better to use two axes for the circular section > >of the cylinder, and another for the axis of the cylinder. The > >circle would then be described an angular axis coupled to > >a radial axis. The offset of the radial axis would then be > >placed at the center of the circle, and the displacement > >would give the (constant) radius of the circle. The coupled > >angular axis would then step through the pixels. A third > >axis would go along the axis of the cylinder. I'll work > >up a detailed example later today. > > > >===================================================== > > Herbert J. Bernstein, Professor of Computer Science > > Dowling College, Kramer Science Center, KSC 121 > > Idle Hour Blvd, Oakdale, NY, 11769 > > > > +1-631-244-3035 > > yaya@dowling.edu > >===================================================== > > > >On Wed, 1 Aug 2007, James Hester wrote: > > > >> I have a question relating to describing cylindrical detectors (e.g. > >> Debye-Scherrer camera using image plates) in imgCIF. There appear to > be no > >> examples in the 'canonical' imgCIF literature relating to such > non-flat > >> detectors, let me give my best shot here - I would appreciate any > feedback > >> as to the correctness of this description, particularly the > characterisation > >> of the array structure axis as a detector rotation axis located at the > >> sample. > >> > >> Is it reasonable to use _array_structure_list_axis.angle_increment > instead > >> of displacement_increment? > >> > >> Note that the radius of curvature of the detector is implied by the > offset > >> of the other detector axis, and once this is given the pixel > displacement > >> increment can be converted to degrees. > >> > >> For a cylindrically curved detector located 573mm from the sample, I > would > >> guess the following axis definitions: > >> > >> ########## > >> loop_ > >> _axis.id > >> _axis.type > >> _axis.equipment > >> _axis.depends_on > >> _axis.offset[1] _axis.offset[2] _axis.offset[3] _axis.vector[1] > >> _axis.vector[2] _axis.vector[3] > >> > >> source . source . 0 0 0 0 0 1 > >> omega rotation goniometer . 0 0 0 1 0 0 > >> det_up . detector . 0 0 -573 1 0 0 > #parallel to > >> sample rotation axis but on surface of > >> det_along rotation detector . 0 0 0 1 0 0 #coincident > with > >> sample rotation > >> > >> # the image that comes off is 2000x4000 pixels, with the fast and > short > >> direction in the cylindrical z #direction: > >> > >> loop_ > >> _array_structure_list.axis_set_id > >> _array_structure_list.dimension > >> _array_structure_list.precedence > >> > >> det_up 2000 1 > >> det_along 4000 2 > >> > >> #vertical and horizontal pixels are 100 microns in size... > >> > >> loop_ > >> _array_structure_list_axis.axis_id > >> _array_structure_list_axis.displacement_increment > >> > >> det_up 0.1 > >> det_along 0.1 > >> _______________________________________________ > >> imgcif-l mailing list > >> imgcif-l@iucr.org > >> http://scripts.iucr.org/mailman/listinfo/imgcif-l > >> > >_______________________________________________ > >imgcif-l mailing list > >imgcif-l@iucr.org > >http://scripts.iucr.org/mailman/listinfo/imgcif-l > > > -- > ===================================================== > Herbert J. Bernstein, Professor of Computer Science > Dowling College, Kramer Science Center, KSC 121 > Idle Hour Blvd, Oakdale, NY, 11769 > > +1-631-244-3035 > yaya@dowling.edu > ===================================================== > _______________________________________________ > imgcif-l mailing list > imgcif-l@iucr.org > http://scripts.iucr.org/mailman/listinfo/imgcif-l > _______________________________________________ imgcif-l mailing list imgcif-l@iucr.org http://scripts.iucr.org/mailman/listinfo/imgcif-l
Reply to: [list | sender only]
- Prev by Date: Re: [Imgcif-l] Fwd: Re: Cylindrical detectors
- Next by Date: [Imgcif-l] participants in the imgCIF workshops
- Prev by thread: [Imgcif-l] participants in the imgCIF workshops
- Next by thread: Re: [Imgcif-l] Fwd: Re: Cylindrical detectors
- Index(es):