diff options
-rw-r--r-- | doc/man/crystfel_geometry.5.md | 13 | ||||
-rw-r--r-- | libcrystfel/src/crystfel-mille.c | 3 | ||||
-rw-r--r-- | libcrystfel/src/datatemplate.c | 124 | ||||
-rw-r--r-- | libcrystfel/src/datatemplate_priv.h | 1 | ||||
-rw-r--r-- | src/im-sandbox.c | 9 | ||||
-rw-r--r-- | src/indexamajig.c | 5 | ||||
-rwxr-xr-x | tests/geom_roundtrip | 76 |
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 |