The subspace is a history of all filtering applied to a file (e.g. selection of a
source region, flaring interval, etc.). Having this recorded in a data
file header allows subsequent tools to extract appropriate calibration
information. The subspace also allows users to see how the data file
has been altered during analysis.  All tools that use the Data Model I/O library
propagate the data subspace.  
An example of the subspace of an event list is shown below (as output by 
dmlist).
As can be seen, the file only contains events on ACIS-I3 
(chip_id = 3) that have a grade of 0,2,3,4 or 6. No spatial filtering
has been applied to the file, since the spatial columns - e.g.
chip, tdet, det, and sky - still contain the default values.
dmlist acisi3.fits subspace
------------------------------------------------------------------
Data subspace for block EVENTS: Components: 1 Descriptors: 15 	  
------------------------------------------------------------------
 
 --- Component 1 --- 
  1 time      Real8       TABLE GTI3
                          
                           68100824.64862958:   68104649.02862957
                           68104681.43862958:   68107857.61862957
                           68108862.32862958:   68111920.76850605
  2 ccd_id    Int2        3:3 
  3 node_id   Int2        0:3 
  4 expno     Int4        0:2147483647 
  5 chip      [ 1] chipx  1:1024 
  5 chip      [ 2] chipy  1:1024 
  6 tdet      [ 1] tdetx  1:8192 
  6 tdet      [ 2] tdety  1:8192 
  7 det       [ 1] detx       0.50:     8192.50 
  7 det       [ 2] dety       0.50:     8192.50 
  8 sky       [ 1] x          0.50:     8192.50 
  8 sky       [ 2] y          0.50:     8192.50 
  9 pha       Int4        0:36855 
 10 energy    Real4       0:    1000000.0 
 11 pi        Int4        1:1024 
 12 fltgrade  Int2        0:255 
 13 grade     Int2        0:0,2:2,3:3,4:4,6:6 
 14 status    Bit         
 15 phas      Int2        -4096:4095 
 
If the event file were to be filtered using 
"sky=circle(4324,3676,50)", the subspace would change to
(showing only the changed values):
dmlist "acisi3.fits[sky=circle(4324,3676,50)]" subspace
...
  8 sky       Real4       Rectangle(4274,3626,4374,3726)&Circle(4324,3676,50)
  8 sky       Real4       Field area = 6.71089e+07 Region area = 7853.7
	      		  
  8 sky       [ 1] x           4274.0:     4374.0 
  8 sky       [ 2] y           3626.0:     3726.0 
 
The subspace as given above can be read as a statement that the
events in the file are drawn from the intersection (logical AND)
of the listed restrictions: they must have sky values in the
given range AND time values in the given range AND ..., etc.
In general, a complicated filter may involve unions (logical OR).
The most common way this arises is when two files with different
subspaces are merged. Suppose we do
dmcopy "acisi3.fits[sky=circle(4324,3676,50)]"  acisi3_circle.fits
dmcopy "acisi3.fits[energy=1000:2000]" acisi3_energy.fits
dmmerge acisi3_circle,fits,acisi3_energy.fits outfile=merge.fits
dmlist merge.fits subspace
 
We will now get two parts ('components') to the subspace, since
the data is drawn from the union of two sets: photons
which have 'sky in this circle' OR 'energy in this range'.
In particular, for ACIS data we have different time filters for
each chip. This is because the frame start times for each chip
are fractionally different, and because dropouts or saturation can happen at
different times for different chips. Therefore, we have at least
one subspace component for each chip in ACIS data; this is reflected
by the presence of one GTI extension per chip (good time intervals, giving the
times for that particular chip). In CIAO, the GTIs familiar to
users of X-ray data from other missions are considered part of the
more general idea of a data subspace. We read the event subspace as
'photons are drawn from (ccd = 3 AND time in GTI3) OR (ccd = 4 AND time in GTI4)
OR ...'. If you filter the resulting event file with a simple filter
like 'energy=1000:200', that filter will be intersected with each of the
components. However, note that by merging two multiple-GTI ACIS event files
with different filters you can generate a more complex filter
which has more than one GTI per chip.