53 #define PRINT_USAGE(rc) \ 54 fprintf(stderr, "Usage: %s [ -s ] [ -d ] FILENAMES\n", argv[0]); \ 55 cpl_end(); return (rc); 57 int main(
int argc,
char **argv)
59 cpl_init(CPL_INIT_DEFAULT);
68 cpl_boolean dodelete = CPL_FALSE,
70 cpl_array *inames = cpl_array_new(0, CPL_TYPE_STRING);
71 int nin = cpl_array_get_size(inames);
73 for (i = 1; i < argc; i++) {
74 if (strncmp(argv[i],
"-s", 3) == 0) {
76 }
else if (strncmp(argv[i],
"-d", 3) == 0) {
78 }
else if (strncmp(argv[i],
"-", 1) == 0) {
81 cpl_array_set_size(inames, ++nin);
82 cpl_array_set_string(inames, nin - 1, argv[i]);
86 cpl_errorstate state = cpl_errorstate_get();
89 printf(
"Separate input product%s:\n", nin == 0 ?
"" :
"s");
90 cpl_frameset *fset = cpl_frameset_new();
91 for (i = 0; i < nin; i++) {
92 cpl_frame *frame = cpl_frame_new();
93 const char *fn = cpl_array_get_string(inames, i);
94 cpl_frame_set_filename(frame, fn);
96 cpl_propertylist *header = cpl_propertylist_load(fn, 0);
99 if (tag && !strncmp(tag,
"PIXTABLE_", 9)) {
100 fprintf(stderr,
"\tWARNING: \"%s\" (PRO.CATG %s), cannot merge this type!\n", fn, tag);
101 cpl_frame_delete(frame);
102 cpl_propertylist_delete(header);
105 cpl_frame_set_tag(frame, tag);
106 cpl_frame_set_group(frame, CPL_FRAME_GROUP_NONE);
108 cpl_frame_set_type(frame, CPL_FRAME_TYPE_NONE);
109 cpl_frame_set_level(frame, CPL_FRAME_LEVEL_NONE);
110 printf(
"\t\"%s\" (PRO.CATG %s).\n", fn, tag);
111 cpl_propertylist_delete(header);
114 cpl_frame_dump(frame, stdout);
117 cpl_frameset_insert(fset, frame);
119 cpl_array_delete(inames);
122 nin = cpl_frameset_get_size(fset);
124 cpl_frameset_delete(fset);
128 printf(
"Merging %d products, %s the input files...\n", nin,
129 dodelete ?
"deleting" :
"keeping");
132 printf(
"merged frameset:\n");
133 cpl_frameset_dump(fset, stdout);
137 int nout = cpl_frameset_get_size(fset),
138 nmerged = nout - (dodelete ? 0 : nin);
140 printf(
"Signing %d output product%s...\n", nmerged, nmerged == 0 ?
"" :
"s");
141 cpl_dfs_sign_products(fset, CPL_DFS_SIGNATURE_DATAMD5 | CPL_DFS_SIGNATURE_CHECKSUM);
144 printf(
"Merged output product%s:\n", nout == 0 ?
"" :
"s");
145 for (i = 0; i < nout; i++) {
146 const cpl_frame *frame = cpl_frameset_get_position_const(fset, i);
147 if (cpl_frame_get_group(frame) != CPL_FRAME_GROUP_PRODUCT) {
150 const char *fn = cpl_frame_get_filename(frame);
151 cpl_propertylist *header = cpl_propertylist_load(fn, 0);
153 int next = cpl_fits_count_extensions(fn);
154 printf(
"\t\"%s\" (PRO.CATG %s, %d FITS extensions)\n", fn, tag, next);
155 cpl_propertylist_delete(header);
157 cpl_frameset_delete(fset);
160 if (!cpl_errorstate_is_equal(state)) {
void muse_cplerrorstate_dump_some(unsigned aCurrent, unsigned aFirst, unsigned aLast)
Dump some CPL errors.
const char * muse_pfits_get_pro_catg(const cpl_propertylist *aHeaders)
find out the PRO category
void muse_processing_recipeinfo(cpl_plugin *)
Output main pipeline configuration, inputs, and parameters.
cpl_error_code muse_utils_frameset_merge_frames(cpl_frameset *aFrames, cpl_boolean aDelete)
Merge IFU-specific files from a frameset to create multi-IFU outputs.