What does this warning mean?
WARNING: Zero length polygon line segment at (x,y) (index = z)
This message indicates that the CXC Datamodel (DM) has encountered a region containing a polygon that has a duplicate, adjacent pair of X,Y coordinates. This results in a polygon with a side having a length equal to zero. Before CIAO 4.8, this type of polygon could result in some pixels being incorrectly filtered and could result in problems with the calculation of the region's area. As of CIAO 4.8, this type of complex polygon is handled better though the area is a pixelated approximation. Therefore, users in general do not need to be concerned about this warning unless they are trying to use polygons with highly precise coordinates.
Users may encounter this type of "zero length" region as part of a normal user filter:
unix% dmcopy img.fits[sky=polygon(3000,3000,3000,5000,3000,5000,5000,5000,5000,3000)]" out.fits WARNING: Zero length polygon line segment at (3000,5000) (index = 1). ...
or may be encountered when the DM is accessing the data subspace stored in the file.
unix% dmcopy "acisf14520N002_evt2.fits[sky=region(acisf14520_000N002_fov1.fits)]" events_with_fov_subspace unix% dmlist events_with_fov_subspace blocks WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). ... -------------------------------------------------------------------------------- Dataset: events_with_fov_subspace -------------------------------------------------------------------------------- Block Name Type Dimensions -------------------------------------------------------------------------------- Block 1: PRIMARY Null Block 2: EVENTS Table 15 cols x 259266 rows Block 3: GTI1 Table 2 cols x 1 rows Block 4: GTI7 Table 2 cols x 1 rows Block 5: GTI3 Table 2 cols x 1 rows Block 6: GTI2 Table 2 cols x 2 rows Block 7: GTI0 Table 2 cols x 1 rows
In this second example, the duplicate polygon points are the result of the limited numerical precision used to store the region subspace information. When a DM filter is applied, information about the filter is stored in the file's header keywords. The precision used to store this information may be such that closely spaced polygon points are stored as duplicate data points. In the example below, a field of view, FOV, file is used to filter the event file. Some points in the FOV file are very close and are written to the file's subspace as duplicate points. The "zero length" warning will be emitted whenever the DM accesses this region.
unix% dmlist acisf14520_000N002_fov1.fits"[cols x,y]" data,array,clean # POS(X,Y)[11] 5069.8731317541 3986.6221794707 4060.9887703561 4125.6853348714 4023.4327250794 4125.6825301606 3882.0581240740 3119.1275223318 ... 4002.0068195197 4106.9717942120 4039.5618986631 4106.9757061631 4039.5645155901 4106.9825114314 4180.9752530170 5113.5335671620 ... unix% dmlist events_with_fov_subspace subspace | grep -i polygon WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). ... 8 sky Real4 Polygon(5069.87,3986.62,...)|Polygon(2993.1,4245.98,4002.01,4106.97,4039.56,4106.98,4039.56,4106.98,... ...
As in this example, the "zero length" message may appear multiple times at the same location. The polygon is stored multiple times in the subspace (ie each subspace component), typically once for each CCD_ID. This warning is shown for each of those polygons individually. Note: In general, each CCD_ID does not have to have the same spatial filter which is why the information is stored separately for each chip. There may also be multiple pairs (or longer chains) of duplicate data points; this warning is printed for each.
This precision loss only occurs when the file is written and the subspace is read back in. Users that require highly precise polygon points should therefore apply such filters at the place in their analysis workflow where the data are extracted. For example, rather than filter and then bin as separate steps
unix% dmcopy "acisf14520N002_evt2.fits[sky=region(acisf14520_000N002_fov1.fits)]" events_with_fov_subspace unix% dmextract "events_with_fov_subspace[sky=circle(4096,4096,10)][bin pi]" spectrum WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). WARNING: Zero length polygon line segment at (4039.56,4106.98) (index = 2). ...
Users that require precise polygon points should filter and bin at the same step
unix% dmextract "acisf14520N002_evt2.fits[sky=region(acisf14520_000N002_fov1.fits)][sky=circle(4096,4096,10)][bin pi]" spectrum2