aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/datatemplate.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2023-07-13 17:19:42 +0200
committerThomas White <taw@physics.org>2023-07-28 13:22:05 +0200
commita3480ec447f420a49bdf89f80a500c0dc3aecc2e (patch)
treeb3d0f6326a3dc2a8123edbcd826a117b6a026e13 /libcrystfel/src/datatemplate.c
parentb1089d5a0b75fb1dc66a6d8384d5e3ff1d0d7d78 (diff)
Implement data_template_group_info()
Diffstat (limited to 'libcrystfel/src/datatemplate.c')
-rw-r--r--libcrystfel/src/datatemplate.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/libcrystfel/src/datatemplate.c b/libcrystfel/src/datatemplate.c
index 6adfb9f3..fd7f2761 100644
--- a/libcrystfel/src/datatemplate.c
+++ b/libcrystfel/src/datatemplate.c
@@ -2623,3 +2623,40 @@ int data_template_write_to_file(const DataTemplate *dtempl, const char *filename
fclose(fh);
return 0;
}
+
+
+static void add_group_info(struct dg_group_info *ginfo, int *ppos,
+ struct panel_group_template *group,
+ int serial, int level, int c_mul)
+{
+ int j;
+ int i = *ppos;
+ (*ppos)++;
+
+ ginfo[i].name = group->name;
+ ginfo[i].serial = serial;
+ ginfo[i].hierarchy_level = level;
+
+ for ( j=0; j<group->n_children; j++ ) {
+ add_group_info(ginfo, ppos, group->children[j],
+ serial+c_mul*(j+1), level+1, c_mul*100);
+ }
+}
+
+
+struct dg_group_info *data_template_group_info(const DataTemplate *dtempl, int *n)
+{
+ struct dg_group_info *ginfo;
+ int i;
+ struct panel_group_template *group;
+
+ ginfo = malloc(sizeof(struct dg_group_info)*dtempl->n_groups);
+ if ( ginfo == NULL ) return NULL;
+
+ group = find_group(dtempl, "all");
+ i = 0;
+ add_group_info(ginfo, &i, group, 0, 0, 100);
+
+ *n = dtempl->n_groups;
+ return ginfo;
+}