aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/man/crystfel_geometry.5.md13
-rw-r--r--libcrystfel/src/crystfel-mille.c3
-rw-r--r--libcrystfel/src/datatemplate.c124
-rw-r--r--libcrystfel/src/datatemplate_priv.h1
-rw-r--r--src/im-sandbox.c9
-rw-r--r--src/indexamajig.c5
-rwxr-xr-xtests/geom_roundtrip76
7 files changed, 168 insertions, 63 deletions
diff --git a/doc/man/crystfel_geometry.5.md b/doc/man/crystfel_geometry.5.md
index ecaf60bf..640771ee 100644
--- a/doc/man/crystfel_geometry.5.md
+++ b/doc/man/crystfel_geometry.5.md
@@ -529,13 +529,20 @@ Groups can themselves be combined into higher-level groups, for example:
group_all = abc,def
-This defines a group called *all** which contains both of the groups created
+This defines a group called **all** which contains both of the groups created
above.
The highest-level group should always be called **all**.
-If the detector consists of only one panel, CrystFEL will automatically create
-the **all** group containing it.
+All members of a group need to be defined before defining the group. This
+means that the group definitions must come **after** the panel definitions, and
+the groups should be defined from the bottom to top level of the hierarchy -
+the **all** group coming last.
+
+If you do not define any groups, CrystFEL will automatically create the **all**
+group for you, containing all panels in a flat hierarchy. This allows basic
+geometry refinement (level zero, see **align_detector**) to work without any
+extra work.
The **group** system replaces the **rigid_group** system used in older versions
of CrystFEL. If the geometry file contains any **rigid_group** lines, they
diff --git a/libcrystfel/src/crystfel-mille.c b/libcrystfel/src/crystfel-mille.c
index 3d02e527..72f89425 100644
--- a/libcrystfel/src/crystfel-mille.c
+++ b/libcrystfel/src/crystfel-mille.c
@@ -327,6 +327,9 @@ void crystfel_mille_write_record(Mille *m)
int ni = 0;
int nw = (m->n * 2)+2;
+ /* Don't write empty records */
+ if ( m->n == 0 ) return;
+
fwrite(&nw, sizeof(int), 1, m->fh);
fwrite(&nf, sizeof(float), 1, m->fh);
diff --git a/libcrystfel/src/datatemplate.c b/libcrystfel/src/datatemplate.c
index df0ad343..94c894cb 100644
--- a/libcrystfel/src/datatemplate.c
+++ b/libcrystfel/src/datatemplate.c
@@ -90,21 +90,13 @@ static struct panel_group_template *add_group(const char *name, DataTemplate *dt
}
-static int parse_group(const char *name, DataTemplate *dt, const char *val)
+static int add_group_members(const char *name, DataTemplate *dt,
+ char **members, int n_members)
{
struct panel_group_template *gt;
- int n_members;
- char **members;
int i;
int fail = 0;
- gt = add_group(name, dt);
- if ( gt == NULL ) {
- ERROR("Failed to add group\n");
- return 1;
- }
-
- n_members = assplode(val, ",", &members, ASSPLODE_NONE);
if ( n_members == 0 ) {
ERROR("Panel group '%s' has no members\n", name);
fail = 1;
@@ -113,33 +105,58 @@ static int parse_group(const char *name, DataTemplate *dt, const char *val)
if ( n_members > MAX_PANEL_GROUP_CHILDREN ) {
ERROR("Panel group '%s' has too many members\n", name);
fail = 1;
- } else {
+ }
- /* A simple typo in the geometry file can segfault other
- * stuff, so check */
- for ( i=0; i<n_members; i++ ) {
- int j;
- for ( j=0; j<i; j++ ) {
- if ( strcmp(members[i], members[j]) == 0 ) {
- ERROR("Duplicate member '%s' in group '%s'\n",
- members[i], name);
- fail = 1;
- }
- }
- }
- for ( i=0; i<n_members; i++ ) {
- gt->children[i] = find_group(dt, members[i]);
- if ( gt->children[i] == NULL ) {
- ERROR("Unknown panel group '%s'\n", members[i]);
+ /* A simple typo in the geometry file can segfault other
+ * stuff, so check */
+ for ( i=0; i<n_members; i++ ) {
+ int j;
+ for ( j=0; j<i; j++ ) {
+ if ( strcmp(members[i], members[j]) == 0 ) {
+ ERROR("Duplicate member '%s' in group '%s'\n",
+ members[i], name);
fail = 1;
}
}
+ }
+
+ if ( fail ) return fail;
- gt->n_children = n_members;
+ gt = add_group(name, dt);
+ if ( gt == NULL ) {
+ ERROR("Failed to add group\n");
+ return 1;
+ }
+ for ( i=0; i<n_members; i++ ) {
+ gt->children[i] = find_group(dt, members[i]);
+ if ( gt->children[i] == NULL ) {
+ ERROR("Unknown panel group '%s'\n", members[i]);
+ ERROR("Make sure the hierarchy groups definitions are AFTER the "
+ "panel definitions in the geometry file, and start from "
+ "the lowest hierachy level.\n");
+ fail = 1;
+ }
}
+ gt->n_children = n_members;
+
+ return fail;
+}
+
+
+static int parse_group(const char *name, DataTemplate *dt, const char *val)
+{
+ int n_members;
+ char **members;
+ int i;
+ int fail = 0;
+
+ n_members = assplode(val, ",", &members, ASSPLODE_NONE);
+
+ fail = add_group_members(name, dt, members, n_members);
+
for ( i=0; i<n_members; i++ ) cffree(members[i]);
cffree(members);
@@ -147,7 +164,6 @@ static int parse_group(const char *name, DataTemplate *dt, const char *val)
}
-
static struct panel_template *new_panel(DataTemplate *det,
const char *name,
struct panel_template *defaults)
@@ -575,7 +591,6 @@ static int parse_field_for_panel(struct panel_template *panel, const char *key,
} else if ( strcmp(key, "coffset") == 0) {
panel->cnz_offset = atof(val);
- panel->cnz_offset_default = def;
} else if ( strcmp(key, "res") == 0 ) {
panel->pixel_pitch = 1.0/atof(val);
panel->pixel_pitch_default = def;
@@ -1051,7 +1066,6 @@ DataTemplate *data_template_new_from_string(const char *string_in)
defaults.cnx = NAN;
defaults.cny = NAN;
defaults.cnz_offset = 0.0;
- defaults.cnz_offset_default = 1;
defaults.pixel_pitch = -1.0;
defaults.pixel_pitch_default = 1;
defaults.bad = 0;
@@ -1400,10 +1414,20 @@ DataTemplate *data_template_new_from_string(const char *string_in)
cffree(defaults.masks[i].filename);
}
- /* If this is a single-panel detector, there should only be one group
- * called "all" which points to the panel */
- if ( (dt->n_panels == 1) && (dt->n_groups == 1) ) {
- parse_group("all", dt, dt->groups[0]->name);
+ /* If no groups are defined, put everything in one group.
+ * This allows at least basic geometry refinement to work. */
+ if ( dt->n_groups == dt->n_panels ) {
+ char **allg = malloc(dt->n_groups*sizeof(char *));
+ if ( allg == NULL ) {
+ ERROR("Failed to create top group\n");
+ } else {
+ int i;
+ for ( i=0; i<dt->n_groups; i++ ) {
+ allg[i] = dt->groups[i]->name;
+ }
+ add_group_members("all", dt, allg, dt->n_groups);
+ free(allg);
+ }
}
cffree(string_orig);
@@ -2377,7 +2401,6 @@ int data_template_write_to_fh(const DataTemplate *dtempl, FILE *fh)
}
/* Other top-levels */
- int cnz_offset_done = 0;
int mask_done[MAX_MASKS] = {0};
int satmap_done = 0;
int satmap_file_done = 0;
@@ -2393,11 +2416,6 @@ int data_template_write_to_fh(const DataTemplate *dtempl, FILE *fh)
const struct panel_template *p = &dtempl->panels[i];
int j;
- if ( p->cnz_offset_default && !cnz_offset_done ) {
- fprintf(fh, "coffset = %f\n", p->cnz_offset);
- cnz_offset_done = 1;
- }
-
for ( j=0; j<MAX_MASKS; j++ ) {
if ( p->masks[j].data_location == NULL ) continue;
if ( !p->masks[j].mask_default ) continue;
@@ -2501,17 +2519,19 @@ int data_template_write_to_fh(const DataTemplate *dtempl, FILE *fh)
/* Bad regions */
for ( i=0; i<dtempl->n_bad; i++ ) {
const struct dt_badregion *bad = &dtempl->bad[i];
+ assert(strncmp(bad->name, "bad", 3) == 0);
if ( bad->is_fsss ) {
- fprintf(fh, "bad_%s/panel = %s\n", bad->name, bad->panel_name);
- fprintf(fh, "bad_%s/min_fs = %i\n", bad->name, bad->min_fs);
- fprintf(fh, "bad_%s/max_fs = %i\n", bad->name, bad->max_fs);
- fprintf(fh, "bad_%s/min_ss = %i\n", bad->name, bad->min_ss);
- fprintf(fh, "bad_%s/max_ss = %i\n", bad->name, bad->max_ss);
+ const struct panel_template *p = &dtempl->panels[bad->panel_number];
+ fprintf(fh, "%s/panel = %s\n", bad->name, p->name);
+ fprintf(fh, "%s/min_fs = %i\n", bad->name, bad->min_fs+p->orig_min_fs);
+ fprintf(fh, "%s/max_fs = %i\n", bad->name, bad->max_fs+p->orig_min_fs);
+ fprintf(fh, "%s/min_ss = %i\n", bad->name, bad->min_ss+p->orig_min_ss);
+ fprintf(fh, "%s/max_ss = %i\n", bad->name, bad->max_ss+p->orig_min_ss);
} else {
- fprintf(fh, "bad_%s/min_x = %f\n", bad->name, bad->min_x);
- fprintf(fh, "bad_%s/max_x = %f\n", bad->name, bad->max_x);
- fprintf(fh, "bad_%s/min_y = %f\n", bad->name, bad->min_y);
- fprintf(fh, "bad_%s/max_y = %f\n", bad->name, bad->max_y);
+ fprintf(fh, "%s/min_x = %f\n", bad->name, bad->min_x);
+ fprintf(fh, "%s/max_x = %f\n", bad->name, bad->max_x);
+ fprintf(fh, "%s/min_y = %f\n", bad->name, bad->min_y);
+ fprintf(fh, "%s/max_y = %f\n", bad->name, bad->max_y);
}
fprintf(fh, "\n");
}
@@ -2533,9 +2553,7 @@ int data_template_write_to_fh(const DataTemplate *dtempl, FILE *fh)
fprintf(fh, "%s/ss = %fx %+fy %+fz\n", p->name,
p->ssx, p->ssy, p->ssz);
- if ( !p->cnz_offset_default ) {
- fprintf(fh, "%s/coffset = %f\n", p->name, p->cnz_offset);
- }
+ fprintf(fh, "%s/coffset = %f\n", p->name, p->cnz_offset);
for ( j=0; j<MAX_MASKS; j++ ) {
if ( p->masks[j].data_location == NULL ) continue;
diff --git a/libcrystfel/src/datatemplate_priv.h b/libcrystfel/src/datatemplate_priv.h
index ab40ac2f..26ee91ed 100644
--- a/libcrystfel/src/datatemplate_priv.h
+++ b/libcrystfel/src/datatemplate_priv.h
@@ -130,7 +130,6 @@ struct panel_template
/** The offset to be applied from clen */
double cnz_offset;
- int cnz_offset_default;
/** Mask definitions */
struct mask_template masks[MAX_MASKS];
diff --git a/src/im-sandbox.c b/src/im-sandbox.c
index 3d9f1f96..2fa19820 100644
--- a/src/im-sandbox.c
+++ b/src/im-sandbox.c
@@ -343,7 +343,6 @@ static int run_work(const struct index_args *iargs, Stream *st,
struct im_asapo *asapostuff = NULL;
Mille *mille;
ImageDataArrays *ida;
- int asapo_message_id;
if ( sb->profile ) {
profile_init();
@@ -491,6 +490,7 @@ static int run_work(const struct index_args *iargs, Stream *st,
char *filename;
char *event;
int finished = 0;
+ int asapo_message_id;
profile_start("asapo-fetch");
set_last_task(sb->shared->last_task[cookie], "ASAPO fetch");
@@ -533,10 +533,11 @@ static int run_work(const struct index_args *iargs, Stream *st,
sb->shared, sb->shared->last_task[cookie],
asapostuff, mille, ida);
profile_end("process-image");
- }
- if ( sb->asapo_params != NULL ) {
- im_asapo_finalise(asapostuff, asapo_message_id);
+ if ( sb->asapo_params != NULL ) {
+ im_asapo_finalise(asapostuff, ser);
+ }
+
}
/* NB pargs.zmq_data, pargs.asapo_data and pargs.asapo_meta
diff --git a/src/indexamajig.c b/src/indexamajig.c
index aa0db210..9416d234 100644
--- a/src/indexamajig.c
+++ b/src/indexamajig.c
@@ -1241,7 +1241,10 @@ int main(int argc, char *argv[])
return 1;
}
- if ( (args.filename != NULL) && is_hdf5_file(args.filename, &err) ) {
+ if ( (args.filename != NULL)
+ && (strcmp(args.filename, "-") != 0)
+ && is_hdf5_file(args.filename, &err) )
+ {
ERROR("Your input file appears to be an HDF5 file.\n");
ERROR("The input file should be a list of data files, not the "
"data file itself.\n");
diff --git a/tests/geom_roundtrip b/tests/geom_roundtrip
index 1d74befd..8f7249ca 100755
--- a/tests/geom_roundtrip
+++ b/tests/geom_roundtrip
@@ -6,7 +6,6 @@ cat > roundtrip.geom << EOF
photon_energy = /LCLS/photon_energy_eV eV
clen = /LCLS/detector_1/EncoderValue
bandwidth = 1.000000e-08
-coffset = 0.573224
mask0_data = /entry_1/data_1/mask
mask0_goodbits = 0x0
mask0_badbits = 0xffff
@@ -17,6 +16,17 @@ dim0 = %
dim1 = ss
dim2 = fs
+bad_t/panel = q3a15
+bad_t/min_fs = 1360
+bad_t/max_fs = 1365
+bad_t/min_ss = 1298
+bad_t/max_ss = 1300
+
+bad_u/min_x = -2000.000000
+bad_u/max_x = 2000.000000
+bad_u/min_y = -20.000000
+bad_u/max_y = 20.000000
+
q0a0/min_fs = 0
q0a0/max_fs = 193
q0a0/min_ss = 0
@@ -25,6 +35,7 @@ q0a0/corner_x = 443.819000
q0a0/corner_y = -49.871900
q0a0/fs = 0.004806x +0.999989y +0.000000z
q0a0/ss = -0.999989x +0.004806y +0.000000z
+q0a0/coffset = 0.573224
q0a0/dim3 = 0
q0a1/min_fs = 194
@@ -35,6 +46,7 @@ q0a1/corner_x = 444.766000
q0a1/corner_y = 147.126000
q0a1/fs = 0.004806x +0.999989y +0.000000z
q0a1/ss = -0.999989x +0.004806y +0.000000z
+q0a1/coffset = 0.573224
q0a1/dim3 = 0
q0a2/min_fs = 0
@@ -45,6 +57,7 @@ q0a2/corner_x = 239.800000
q0a2/corner_y = -49.350400
q0a2/fs = 0.003265x +0.999995y +0.000000z
q0a2/ss = -0.999995x +0.003265y +0.000000z
+q0a2/coffset = 0.573224
q0a2/dim3 = 0
q0a3/min_fs = 194
@@ -55,6 +68,7 @@ q0a3/corner_x = 240.444000
q0a3/corner_y = 147.649000
q0a3/fs = 0.003265x +0.999995y +0.000000z
q0a3/ss = -0.999995x +0.003265y +0.000000z
+q0a3/coffset = 0.573224
q0a3/dim3 = 0
q0a4/min_fs = 0
@@ -65,6 +79,7 @@ q0a4/corner_x = 872.219000
q0a4/corner_y = 342.054000
q0a4/fs = -0.999997x +0.002424y +0.000000z
q0a4/ss = -0.002424x -0.999997y +0.000000z
+q0a4/coffset = 0.573224
q0a4/dim3 = 0
q0a5/min_fs = 194
@@ -75,6 +90,7 @@ q0a5/corner_x = 675.220000
q0a5/corner_y = 342.532000
q0a5/fs = -0.999997x +0.002424y +0.000000z
q0a5/ss = -0.002424x -0.999997y +0.000000z
+q0a5/coffset = 0.573224
q0a5/dim3 = 0
q0a6/min_fs = 0
@@ -85,6 +101,7 @@ q0a6/corner_x = 871.381000
q0a6/corner_y = 135.836000
q0a6/fs = -0.999997x +0.002685y +0.000000z
q0a6/ss = -0.002685x -0.999997y +0.000000z
+q0a6/coffset = 0.573224
q0a6/dim3 = 0
q0a7/min_fs = 194
@@ -95,6 +112,7 @@ q0a7/corner_x = 674.382000
q0a7/corner_y = 136.365000
q0a7/fs = -0.999997x +0.002685y +0.000000z
q0a7/ss = -0.002685x -0.999997y +0.000000z
+q0a7/coffset = 0.573224
q0a7/dim3 = 0
q0a8/min_fs = 0
@@ -105,6 +123,7 @@ q0a8/corner_x = 480.758000
q0a8/corner_y = 769.640000
q0a8/fs = -0.000078x -0.999999y +0.000000z
q0a8/ss = 0.999999x -0.000078y +0.000000z
+q0a8/coffset = 0.573224
q0a8/dim3 = 0
q0a9/min_fs = 194
@@ -115,6 +134,7 @@ q0a9/corner_x = 480.743000
q0a9/corner_y = 572.640000
q0a9/fs = -0.000078x -0.999999y +0.000000z
q0a9/ss = 0.999999x -0.000078y +0.000000z
+q0a9/coffset = 0.573224
q0a9/dim3 = 0
q0a10/min_fs = 0
@@ -125,6 +145,7 @@ q0a10/corner_x = 689.447000
q0a10/corner_y = 770.295000
q0a10/fs = 0.001551x -0.999999y +0.000000z
q0a10/ss = 0.999999x +0.001551y +0.000000z
+q0a10/coffset = 0.573224
q0a10/dim3 = 0
q0a11/min_fs = 194
@@ -135,6 +156,7 @@ q0a11/corner_x = 689.752000
q0a11/corner_y = 573.296000
q0a11/fs = 0.001551x -0.999999y +0.000000z
q0a11/ss = 0.999999x +0.001551y +0.000000z
+q0a11/coffset = 0.573224
q0a11/dim3 = 0
q0a12/min_fs = 0
@@ -145,6 +167,7 @@ q0a12/corner_x = 445.672000
q0a12/corner_y = 751.701000
q0a12/fs = -0.999998x -0.002161y +0.000000z
q0a12/ss = 0.002161x -0.999998y +0.000000z
+q0a12/coffset = 0.573224
q0a12/dim3 = 0
q0a13/min_fs = 194
@@ -155,6 +178,7 @@ q0a13/corner_x = 248.672000
q0a13/corner_y = 751.276000
q0a13/fs = -0.999998x -0.002161y +0.000000z
q0a13/ss = 0.002161x -0.999998y +0.000000z
+q0a13/coffset = 0.573224
q0a13/dim3 = 0
q0a14/min_fs = 0
@@ -165,6 +189,7 @@ q0a14/corner_x = 445.151000
q0a14/corner_y = 541.081000
q0a14/fs = -0.999999x -0.000074y +0.000000z
q0a14/ss = 0.000074x -0.999999y +0.000000z
+q0a14/coffset = 0.573224
q0a14/dim3 = 0
q0a15/min_fs = 194
@@ -175,6 +200,7 @@ q0a15/corner_x = 248.151000
q0a15/corner_y = 541.066000
q0a15/fs = -0.999999x -0.000074y +0.000000z
q0a15/ss = 0.000074x -0.999999y +0.000000z
+q0a15/coffset = 0.573224
q0a15/dim3 = 0
q1a0/min_fs = 388
@@ -185,6 +211,7 @@ q1a0/corner_x = 28.477600
q1a0/corner_y = 436.830000
q1a0/fs = -0.999990x -0.004167y +0.000000z
q1a0/ss = 0.004167x -0.999990y +0.000000z
+q1a0/coffset = 0.573224
q1a0/dim3 = 1
q1a1/min_fs = 582
@@ -195,6 +222,7 @@ q1a1/corner_x = -168.520000
q1a1/corner_y = 436.009000
q1a1/fs = -0.999990x -0.004167y +0.000000z
q1a1/ss = 0.004167x -0.999990y +0.000000z
+q1a1/coffset = 0.573224
q1a1/dim3 = 1
q1a2/min_fs = 388
@@ -205,6 +233,7 @@ q1a2/corner_x = 29.355900
q1a2/corner_y = 226.978000
q1a2/fs = -1.000001x +0.000385y +0.000000z
q1a2/ss = -0.000385x -1.000001y +0.000000z
+q1a2/coffset = 0.573224
q1a2/dim3 = 1
q1a3/min_fs = 582
@@ -215,6 +244,7 @@ q1a3/corner_x = -167.644000
q1a3/corner_y = 227.054000
q1a3/fs = -1.000001x +0.000385y +0.000000z
q1a3/ss = -0.000385x -1.000001y +0.000000z
+q1a3/coffset = 0.573224
q1a3/dim3 = 1
q1a4/min_fs = 388
@@ -225,6 +255,7 @@ q1a4/corner_x = -364.144000
q1a4/corner_y = 859.163000
q1a4/fs = 0.000539x -1.000000y +0.000000z
q1a4/ss = 1.000000x +0.000539y +0.000000z
+q1a4/coffset = 0.573224
q1a4/dim3 = 1
q1a5/min_fs = 582
@@ -235,6 +266,7 @@ q1a5/corner_x = -364.038000
q1a5/corner_y = 662.163000
q1a5/fs = 0.000539x -1.000000y +0.000000z
q1a5/ss = 1.000000x +0.000539y +0.000000z
+q1a5/coffset = 0.573224
q1a5/dim3 = 1
q1a6/min_fs = 388
@@ -245,6 +277,7 @@ q1a6/corner_x = -156.511000
q1a6/corner_y = 857.902000
q1a6/fs = -0.000337x -1.000000y +0.000000z
q1a6/ss = 1.000000x -0.000337y +0.000000z
+q1a6/coffset = 0.573224
q1a6/dim3 = 1
q1a7/min_fs = 582
@@ -255,6 +288,7 @@ q1a7/corner_x = -156.577000
q1a7/corner_y = 660.902000
q1a7/fs = -0.000337x -1.000000y +0.000000z
q1a7/ss = 1.000000x -0.000337y +0.000000z
+q1a7/coffset = 0.573224
q1a7/dim3 = 1
q1a8/min_fs = 388
@@ -265,6 +299,7 @@ q1a8/corner_x = -786.718000
q1a8/corner_y = 463.506000
q1a8/fs = 0.999996x +0.002303y +0.000000z
q1a8/ss = -0.002303x +0.999996y +0.000000z
+q1a8/coffset = 0.573224
q1a8/dim3 = 1
q1a9/min_fs = 582
@@ -275,6 +310,7 @@ q1a9/corner_x = -589.719000
q1a9/corner_y = 463.959000
q1a9/fs = 0.999996x +0.002303y +0.000000z
q1a9/ss = -0.002303x +0.999996y +0.000000z
+q1a9/coffset = 0.573224
q1a9/dim3 = 1
q1a10/min_fs = 388
@@ -285,6 +321,7 @@ q1a10/corner_x = -787.022000
q1a10/corner_y = 668.135000
q1a10/fs = 0.999997x +0.001741y +0.000000z
q1a10/ss = -0.001741x +0.999997y +0.000000z
+q1a10/coffset = 0.573224
q1a10/dim3 = 1
q1a11/min_fs = 582
@@ -295,6 +332,7 @@ q1a11/corner_x = -590.022000
q1a11/corner_y = 668.478000
q1a11/fs = 0.999997x +0.001741y +0.000000z
q1a11/ss = -0.001741x +0.999997y +0.000000z
+q1a11/coffset = 0.573224
q1a11/dim3 = 1
q1a12/min_fs = 388
@@ -305,6 +343,7 @@ q1a12/corner_x = -761.085000
q1a12/corner_y = 428.541000
q1a12/fs = -0.000201x -0.999999y +0.000000z
q1a12/ss = 0.999999x -0.000201y +0.000000z
+q1a12/coffset = 0.573224
q1a12/dim3 = 1
q1a13/min_fs = 582
@@ -315,6 +354,7 @@ q1a13/corner_x = -761.125000
q1a13/corner_y = 231.541000
q1a13/fs = -0.000201x -0.999999y +0.000000z
q1a13/ss = 0.999999x -0.000201y +0.000000z
+q1a13/coffset = 0.573224
q1a13/dim3 = 1
q1a14/min_fs = 388
@@ -325,6 +365,7 @@ q1a14/corner_x = -559.624000
q1a14/corner_y = 428.347000
q1a14/fs = 0.003097x -0.999995y +0.000000z
q1a14/ss = 0.999995x +0.003097y +0.000000z
+q1a14/coffset = 0.573224
q1a14/dim3 = 1
q1a15/min_fs = 582
@@ -335,6 +376,7 @@ q1a15/corner_x = -559.014000
q1a15/corner_y = 231.348000
q1a15/fs = 0.003097x -0.999995y +0.000000z
q1a15/ss = 0.999995x +0.003097y +0.000000z
+q1a15/coffset = 0.573224
q1a15/dim3 = 1
q2a0/min_fs = 776
@@ -345,6 +387,7 @@ q2a0/corner_x = -442.346000
q2a0/corner_y = 20.338200
q2a0/fs = -0.004086x -0.999991y +0.000000z
q2a0/ss = 0.999991x -0.004086y +0.000000z
+q2a0/coffset = 0.573224
q2a0/dim3 = 2
q2a1/min_fs = 970
@@ -355,6 +398,7 @@ q2a1/corner_x = -443.151000
q2a1/corner_y = -176.660000
q2a1/fs = -0.004086x -0.999991y +0.000000z
q2a1/ss = 0.999991x -0.004086y +0.000000z
+q2a1/coffset = 0.573224
q2a1/dim3 = 2
q2a2/min_fs = 776
@@ -365,6 +409,7 @@ q2a2/corner_x = -235.519000
q2a2/corner_y = 19.231200
q2a2/fs = 0.000302x -1.000000y +0.000000z
q2a2/ss = 1.000000x +0.000302y +0.000000z
+q2a2/coffset = 0.573224
q2a2/dim3 = 2
q2a3/min_fs = 970
@@ -375,6 +420,7 @@ q2a3/corner_x = -235.459000
q2a3/corner_y = -177.769000
q2a3/fs = 0.000302x -1.000000y +0.000000z
q2a3/ss = 1.000000x +0.000302y +0.000000z
+q2a3/coffset = 0.573224
q2a3/dim3 = 2
q2a4/min_fs = 776
@@ -385,6 +431,7 @@ q2a4/corner_x = -863.817000
q2a4/corner_y = -370.344000
q2a4/fs = 0.999997x -0.002037y +0.000000z
q2a4/ss = 0.002037x +0.999997y +0.000000z
+q2a4/coffset = 0.573224
q2a4/dim3 = 2
q2a5/min_fs = 970
@@ -395,6 +442,7 @@ q2a5/corner_x = -666.817000
q2a5/corner_y = -370.746000
q2a5/fs = 0.999997x -0.002037y +0.000000z
q2a5/ss = 0.002037x +0.999997y +0.000000z
+q2a5/coffset = 0.573224
q2a5/dim3 = 2
q2a6/min_fs = 776
@@ -405,6 +453,7 @@ q2a6/corner_x = -863.549000
q2a6/corner_y = -165.126000
q2a6/fs = 1.000000x -0.001155y +0.000000z
q2a6/ss = 0.001155x +1.000000y +0.000000z
+q2a6/coffset = 0.573224
q2a6/dim3 = 2
q2a7/min_fs = 970
@@ -415,6 +464,7 @@ q2a7/corner_x = -666.549000
q2a7/corner_y = -165.353000
q2a7/fs = 1.000000x -0.001155y +0.000000z
q2a7/ss = 0.001155x +1.000000y +0.000000z
+q2a7/coffset = 0.573224
q2a7/dim3 = 2
q2a8/min_fs = 776
@@ -425,6 +475,7 @@ q2a8/corner_x = -473.620000
q2a8/corner_y = -793.473000
q2a8/fs = 0.002076x +0.999998y +0.000000z
q2a8/ss = -0.999998x +0.002076y +0.000000z
+q2a8/coffset = 0.573224
q2a8/dim3 = 2
q2a9/min_fs = 970
@@ -435,6 +486,7 @@ q2a9/corner_x = -473.211000
q2a9/corner_y = -596.474000
q2a9/fs = 0.002076x +0.999998y +0.000000z
q2a9/ss = -0.999998x +0.002076y +0.000000z
+q2a9/coffset = 0.573224
q2a9/dim3 = 2
q2a10/min_fs = 776
@@ -445,6 +497,7 @@ q2a10/corner_x = -676.809000
q2a10/corner_y = -792.653000
q2a10/fs = 0.004134x +0.999991y +0.000000z
q2a10/ss = -0.999991x +0.004134y +0.000000z
+q2a10/coffset = 0.573224
q2a10/dim3 = 2
q2a11/min_fs = 970
@@ -455,6 +508,7 @@ q2a11/corner_x = -675.995000
q2a11/corner_y = -595.655000
q2a11/fs = 0.004134x +0.999991y +0.000000z
q2a11/ss = -0.999991x +0.004134y +0.000000z
+q2a11/coffset = 0.573224
q2a11/dim3 = 2
q2a12/min_fs = 776
@@ -465,6 +519,7 @@ q2a12/corner_x = -442.034000
q2a12/corner_y = -769.447000
q2a12/fs = 0.999981x -0.006417y +0.000000z
q2a12/ss = 0.006417x +0.999981y +0.000000z
+q2a12/coffset = 0.573224
q2a12/dim3 = 2
q2a13/min_fs = 970
@@ -475,6 +530,7 @@ q2a13/corner_x = -245.038000
q2a13/corner_y = -770.711000
q2a13/fs = 0.999981x -0.006417y +0.000000z
q2a13/ss = 0.006417x +0.999981y +0.000000z
+q2a13/coffset = 0.573224
q2a13/dim3 = 2
q2a14/min_fs = 776
@@ -485,6 +541,7 @@ q2a14/corner_x = -441.283000
q2a14/corner_y = -566.627000
q2a14/fs = 0.999996x -0.002727y +0.000000z
q2a14/ss = 0.002727x +0.999996y +0.000000z
+q2a14/coffset = 0.573224
q2a14/dim3 = 2
q2a15/min_fs = 970
@@ -495,6 +552,7 @@ q2a15/corner_x = -244.283000
q2a15/corner_y = -567.164000
q2a15/fs = 0.999996x -0.002727y +0.000000z
q2a15/ss = 0.002727x +0.999996y +0.000000z
+q2a15/coffset = 0.573224
q2a15/dim3 = 2
q3a0/min_fs = 1164
@@ -505,6 +563,7 @@ q3a0/corner_x = -33.350700
q3a0/corner_y = -458.693000
q3a0/fs = 0.999988x -0.004965y +0.000000z
q3a0/ss = 0.004965x +0.999988y +0.000000z
+q3a0/coffset = 0.573224
q3a0/dim3 = 3
q3a1/min_fs = 1358
@@ -515,6 +574,7 @@ q3a1/corner_x = 163.647000
q3a1/corner_y = -459.671000
q3a1/fs = 0.999988x -0.004965y +0.000000z
q3a1/ss = 0.004965x +0.999988y +0.000000z
+q3a1/coffset = 0.573224
q3a1/dim3 = 3
q3a2/min_fs = 1164
@@ -525,6 +585,7 @@ q3a2/corner_x = -31.831600
q3a2/corner_y = -254.931000
q3a2/fs = 0.999998x -0.002316y +0.000000z
q3a2/ss = 0.002316x +0.999998y +0.000000z
+q3a2/coffset = 0.573224
q3a2/dim3 = 3
q3a3/min_fs = 1358
@@ -535,6 +596,7 @@ q3a3/corner_x = 165.168000
q3a3/corner_y = -255.388000
q3a3/fs = 0.999998x -0.002316y +0.000000z
q3a3/ss = 0.002316x +0.999998y +0.000000z
+q3a3/coffset = 0.573224
q3a3/dim3 = 3
q3a4/min_fs = 1164
@@ -545,6 +607,7 @@ q3a4/corner_x = 359.553000
q3a4/corner_y = -886.512000
q3a4/fs = 0.002474x +0.999997y +0.000000z
q3a4/ss = -0.999997x +0.002474y +0.000000z
+q3a4/coffset = 0.573224
q3a4/dim3 = 3
q3a5/min_fs = 1358
@@ -555,6 +618,7 @@ q3a5/corner_x = 360.040000
q3a5/corner_y = -689.512000
q3a5/fs = 0.002474x +0.999997y +0.000000z
q3a5/ss = -0.999997x +0.002474y +0.000000z
+q3a5/coffset = 0.573224
q3a5/dim3 = 3
q3a6/min_fs = 1164
@@ -565,6 +629,7 @@ q3a6/corner_x = 154.142000
q3a6/corner_y = -884.763000
q3a6/fs = 0.000059x +1.000000y +0.000000z
q3a6/ss = -1.000000x +0.000059y +0.000000z
+q3a6/coffset = 0.573224
q3a6/dim3 = 3
q3a7/min_fs = 1358
@@ -575,6 +640,7 @@ q3a7/corner_x = 154.154000
q3a7/corner_y = -687.763000
q3a7/fs = 0.000059x +1.000000y +0.000000z
q3a7/ss = -1.000000x +0.000059y +0.000000z
+q3a7/coffset = 0.573224
q3a7/dim3 = 3
q3a8/min_fs = 1164
@@ -585,6 +651,7 @@ q3a8/corner_x = 784.877000
q3a8/corner_y = -492.935000
q3a8/fs = -0.999993x +0.004040y +0.000000z
q3a8/ss = -0.004040x -0.999993y +0.000000z
+q3a8/coffset = 0.573224
q3a8/dim3 = 3
q3a9/min_fs = 1358
@@ -595,6 +662,7 @@ q3a9/corner_x = 587.878000
q3a9/corner_y = -492.139000
q3a9/fs = -0.999993x +0.004040y +0.000000z
q3a9/ss = -0.004040x -0.999993y +0.000000z
+q3a9/coffset = 0.573224
q3a9/dim3 = 3
q3a10/min_fs = 1164
@@ -605,6 +673,7 @@ q3a10/corner_x = 784.254000
q3a10/corner_y = -699.590000
q3a10/fs = -0.999971x +0.007529y +0.000000z
q3a10/ss = -0.007529x -0.999971y +0.000000z
+q3a10/coffset = 0.573224
q3a10/dim3 = 3
q3a11/min_fs = 1358
@@ -615,6 +684,7 @@ q3a11/corner_x = 587.260000
q3a11/corner_y = -698.107000
q3a11/fs = -0.999971x +0.007529y +0.000000z
q3a11/ss = -0.007529x -0.999971y +0.000000z
+q3a11/coffset = 0.573224
q3a11/dim3 = 3
q3a12/min_fs = 1164
@@ -625,6 +695,7 @@ q3a12/corner_x = 769.176000
q3a12/corner_y = -460.510000
q3a12/fs = 0.004516x +0.999990y +0.000000z
q3a12/ss = -0.999990x +0.004516y +0.000000z
+q3a12/coffset = 0.573224
q3a12/dim3 = 3
q3a13/min_fs = 1358
@@ -635,6 +706,7 @@ q3a13/corner_x = 770.066000
q3a13/corner_y = -263.512000
q3a13/fs = 0.004516x +0.999990y +0.000000z
q3a13/ss = -0.999990x +0.004516y +0.000000z
+q3a13/coffset = 0.573224
q3a13/dim3 = 3
q3a14/min_fs = 1164
@@ -645,6 +717,7 @@ q3a14/corner_x = 554.764000
q3a14/corner_y = -460.250000
q3a14/fs = 0.004918x +0.999989y +0.000000z
q3a14/ss = -0.999989x +0.004918y +0.000000z
+q3a14/coffset = 0.573224
q3a14/dim3 = 3
q3a15/min_fs = 1358
@@ -655,6 +728,7 @@ q3a15/corner_x = 555.732000
q3a15/corner_y = -263.253000
q3a15/fs = 0.004918x +0.999989y +0.000000z
q3a15/ss = -0.999989x +0.004918y +0.000000z
+q3a15/coffset = 0.573224
q3a15/dim3 = 3
group_a0 = q0a0,q0a1