SDDS ToolKit Programs and Libraries for C and Python
All Classes Files Functions Variables Macros Pages
SDDSaps.h
Go to the documentation of this file.
1/**
2 * @file SDDSaps.h
3 * @brief Header file for routines used by SDDS command-line applications.
4 *
5 * This header defines the macros, data structures, and function prototypes
6 * utilized by SDDS (Self Describing Data Sets) command-line applications.
7 * It includes definitions for processing various data types, handling
8 * filtering and matching operations, managing output requests, and performing
9 * data conversions and formatting.
10 *
11 * @details
12 * The SDDSaps.h header provides essential components for building command-line
13 * tools that interact with SDDS datasets. It includes:
14 * - Macro definitions for different data classes and processing modes.
15 * - Platform-specific adjustments for Windows environments.
16 * - Data structures for managing items, parameters, equations, scans, edits,
17 * prints, processing definitions, conversions, filters, matches, and more.
18 * - Function prototypes for processing columns, handling definitions, editing
19 * parameters and columns, formatting strings, casting values, and managing
20 * output requests.
21 *
22 * This header is integral for developers working on SDDS applications, ensuring
23 * consistent data handling and processing across various command-line tools.
24 *
25 * @copyright
26 * - (c) 2002 The University of Chicago, as Operator of Argonne National Laboratory.
27 * - (c) 2002 The Regents of the University of California, as Operator of Los Alamos National Laboratory.
28 *
29 * @license
30 * This file is distributed under the terms of the Software License Agreement
31 * found in the file LICENSE included with this distribution.
32 *
33 * @author M. Borland, C. Saunders, R. Soliday, H. Shang
34 */
35
36#define COLUMN_BASED 0
37#define PARAMETER_BASED 1
38#define ARRAY_BASED 2
39#define DATA_CLASS_KEYWORDS 3
40
41#if defined(_WIN32)
42# define sleep(sec) Sleep(sec * 1000)
43/*# define popen(x, y) _popen(x, y)*/
44# define pclose(x) _pclose(x)
45#endif
46
47extern char *data_class_keyword[DATA_CLASS_KEYWORDS];
48
49typedef struct {
50 char **name;
51 long *type, items;
53
54typedef struct {
55 char *name, *format;
57
58typedef struct {
59 char *text, *name, *equation, *udf_name, *select, *editSelection, *exclude;
60 long is_parameter;
61 long redefinition;
62 char **argv;
63 long argc;
65#define IS_EQUATION_DEFINITION 0
66
67typedef struct {
68 char *text, *sscanf_string, *source, *new_name, *edit;
69 long is_parameter;
71#define IS_SCAN_DEFINITION 1
72
73typedef struct {
74 char *text, *edit_command, *source, *new_name;
75 long is_parameter, reedit;
76 char **argv;
77 long argc;
79#define IS_EDIT_DEFINITION 2
80
81typedef struct {
82 char *text, *printf_string, *new_name, **source;
83 long sources, is_parameter, reprint;
84 char *select, *editSelection, *exclude;
86#define IS_PRINT_DEFINITION 3
87
88typedef struct {
89 char *parameter_name, *column_name, *description, *symbol, *lower_par, *upper_par;
90 char *head_par, *tail_par, *fhead_par, *ftail_par, *offset_par, *factor_par;
91 char *functionOf, *weightBy, *match_value, *match_column;
92 double lowerLimit, upperLimit, offset, factor, fhead, ftail, topLimit, bottomLimit;
93 double percentileLevel, binSize, defaultValue;
94 int32_t head, tail;
95 long type, outputType;
96 long mode, memory_number;
97 unsigned long flags;
99#define IS_PROCESSING_DEFINITION 4
100#define PROCESSING_LOLIM_GIVEN 0x000001UL
101#define PROCESSING_UPLIM_GIVEN 0x000002UL
102#define PROCESSING_INVERT_OFFSET 0x000004UL
103#define PROCESSING_DESCRIP_GIVEN 0x000008UL
104#define PROCESSING_FUNCOF_GIVEN 0x000010UL
105#define PROCESSING_TAIL_GIVEN 0x000020UL
106#define PROCESSING_HEAD_GIVEN 0x000040UL
107#define PROCESSING_SYMBOL_GIVEN 0x000080UL
108#define PROCESSING_WEIGHT_GIVEN 0x000100UL
109#define PROCESSING_POSITION_GIVEN 0x000200UL
110#define PROCESSING_OFFSET_GIVEN 0x000400UL
111#define PROCESSING_FACTOR_GIVEN 0x000800UL
112#define PROCESSING_FTAIL_GIVEN 0x001000UL
113#define PROCESSING_FHEAD_GIVEN 0x002000UL
114#define PROCESSING_TOPLIM_GIVEN 0x004000UL
115#define PROCESSING_BOTLIM_GIVEN 0x008000UL
116#define PROCESSING_PERCLEVEL_GIVEN 0x010000UL
117#define PROCESSING_BINSIZE_GIVEN 0x020000UL
118#define PROCESSING_MATCHCOLUMN_GIVEN 0x040000UL
119#define PROCESSING_MATCHVALUE_GIVEN 0x080000UL
120#define PROCESSING_OVERWRITE_GIVEN 0x100000UL
121#define PROCESSING_DEFAULTVALUE_GIVEN 0x200000UL
122#define PROCESSING_INVERT_FACTOR 0x400000UL
123
124typedef struct {
125 char *name, *new_units, *old_units;
126 double factor;
127 long is_parameter;
129#define IS_CONVERSION_DEFINITION 5
130
131typedef struct {
132 char *name, *string;
133 unsigned long logic;
134} MATCH_TERM;
135
136typedef struct {
137 char *name, *upperPar, *lowerPar;
138 double lower, upper;
139 unsigned long logic;
141
142typedef struct {
143 FILTER_TERM *filter_term;
144 long filter_terms, is_parameter;
146#define IS_FILTER_DEFINITION 6
147
148typedef struct {
149 MATCH_TERM *match_term;
150 long match_terms, is_parameter;
152#define IS_MATCH_DEFINITION 7
153
154typedef struct {
155 char *expression;
156 long autostop, is_parameter;
158#define IS_RPNTEST_DEFINITION 8
159
160typedef struct {
161 char *text, *source, *new_name;
162 long is_parameter;
164#define IS_SYSTEM_DEFINITION 9
165
166typedef struct {
167 char *expression;
168 long repeat;
170#define IS_RPNEXPRESSION_DEFINITION 10
171
172typedef struct {
173 int64_t head, tail;
174 short invert;
176#define IS_CLIP_DEFINITION 11
177
178typedef struct {
179 int64_t interval, offset;
181#define IS_SPARSE_DEFINITION 12
182
183typedef struct {
184 double fraction;
186#define IS_SAMPLE_DEFINITION 13
187
188typedef struct {
189 char *name;
190 short is_parameter;
191 unsigned long flags;
193#define IS_NUMBERTEST_DEFINITION 14
194
195typedef struct {
196 char *target, *source, *stringFormat, *doubleFormat, *longFormat;
197 long is_parameter;
199#define IS_FORMAT_DEFINITION 15
200
201typedef struct {
202 char *source, *newName, *newTypeName;
203 long isParameter;
204 int32_t newType;
206#define IS_CAST_DEFINITION 16
207
208typedef struct {
209 int64_t head, tail;
210 double fhead, ftail;
211 short invert;
213#define IS_FCLIP_DEFINITION 17
214
215typedef struct {
216 char *name;
217 double before, after;
218 unsigned long flags;
219 long is_parameter;
221#define TIMEFILTER_BEFORE_GIVEN 0x00001
222#define TIMEFILTER_AFTER_GIVEN 0x00002
223#define TIMEFILTER_INVERT_GIVEN 0x00004
224
225#define IS_TIME_FILTER_DEFINITION 18
226
227typedef struct {
228 char *text, *name, *source, **argv;
229 long is_parameter;
231#define IS_EVALUATE_DEFINITION 19
232
233#define DEFINITION_TYPES 20
234
235typedef struct {
236 long type;
237 void *structure;
238} DEFINITION;
239
240typedef struct {
241 FILE *fp;
242 char *item[4];
243 long columns;
244 int64_t points;
245 long parameter_output;
246 void **definitions;
247 long counter;
249
250#define PROCESS_COLUMN_MEAN 0
251#define PROCESS_COLUMN_RMS 1
252#define PROCESS_COLUMN_SUM 2
253#define PROCESS_COLUMN_STAND_DEV 3
254#define PROCESS_COLUMN_MAD 4
255#define PROCESS_COLUMN_MINIMUM 5
256#define PROCESS_COLUMN_MAXIMUM 6
257#define PROCESS_COLUMN_SMALLEST 7
258#define PROCESS_COLUMN_LARGEST 8
259#define PROCESS_COLUMN_FIRST 9
260#define PROCESS_COLUMN_LAST 10
261#define PROCESS_COLUMN_COUNT 11
262#define PROCESS_COLUMN_SPREAD 12
263#define PROCESS_COLUMN_MEDIAN 13
264#define PROCESS_COLUMN_BASELEVEL 14
265#define PROCESS_COLUMN_TOPLEVEL 15
266#define PROCESS_COLUMN_AMPLITUDE 16
267#define PROCESS_COLUMN_RISETIME 17
268#define PROCESS_COLUMN_FALLTIME 18
269#define PROCESS_COLUMN_FWHM 19
270#define PROCESS_COLUMN_FWTM 20
271#define PROCESS_COLUMN_CENTER 21
272#define PROCESS_COLUMN_ZEROCROSSING 22
273#define PROCESS_COLUMN_FWHA 23
274#define PROCESS_COLUMN_FWTA 24
275#define PROCESS_COLUMN_SIGMA 25
276#define PROCESS_COLUMN_SLOPE 26
277#define PROCESS_COLUMN_INTERCEPT 27
278#define PROCESS_COLUMN_LFSD 28
279#define PROCESS_COLUMN_QRANGE 29
280#define PROCESS_COLUMN_DRANGE 30
281#define PROCESS_COLUMN_PERCENTILE 31
282#define PROCESS_COLUMN_MODE 32
283#define PROCESS_COLUMN_INTEGRAL 33
284#define PROCESS_COLUMN_PRODUCT 34
285#define PROCESS_COLUMN_PRANGE 35
286#define PROCESS_COLUMN_SIGNEDSMALLEST 36
287#define PROCESS_COLUMN_SIGNEDLARGEST 37
288#define PROCESS_COLUMN_GMINTEGRAL 38
289#define PROCESS_COLUMN_CORRELATION 39
290#define N_PROCESS_COLUMN_MODES 40
291#if 0
292extern char *process_column_mode[N_PROCESS_COLUMN_MODES];
293extern char *process_column_name[N_PROCESS_COLUMN_MODES];
294extern char *process_column_description[N_PROCESS_COLUMN_MODES];
295#endif
296
297extern char *addOuterParentheses(char *arg);
298extern void show_process_modes(FILE *fp);
299extern long process_column(SDDS_DATASET *Table, PROCESSING_DEFINITION *processing_ptr, double *result,
300 char **stringResult, long warnings, int threads);
301extern char *process_string_column(SDDS_DATASET *Dataset, PROCESSING_DEFINITION *processing_ptr, long warnings);
302extern long process_filter_request(FILTER_TERM **filter, char **argument, long arguments);
303extern long process_match_request(MATCH_TERM **match, char **argument, long arguments);
304extern void scan_label_parameter(LABEL_PARAMETER *label, char *string);
305extern void show_matches(char *type, MATCH_TERM *match, long matches);
306extern void show_filters(char *type, FILTER_TERM *filter, long filters);
307extern EQUATION_DEFINITION *process_new_equation_definition(char **argument, long arguments);
308extern EVALUATE_DEFINITION *process_new_evaluate_definition(char **argument, long arguments);
309extern EVALUATE_DEFINITION *process_new_evalute_definition(char **argument, long arguments);
310extern SCAN_DEFINITION *process_new_scan_definition(char **argument, long arguments);
311extern CAST_DEFINITION *process_new_cast_definition(char **argument, long arguments);
312extern EDIT_DEFINITION *process_new_edit_definition(char **argument, long arguments, short reedit);
313extern PRINT_DEFINITION *process_new_print_definition(char **argument, long arguments);
314extern FORMAT_DEFINITION *process_new_format_definition(char **argument, long arguments);
315extern PROCESSING_DEFINITION *record_processing_definition(char **argument, long arguments);
316extern PROCESSING_DEFINITION *copyProcessingDefinition(PROCESSING_DEFINITION *source);
317extern void expandProcessingDefinitions(DEFINITION **definition, long *definitions, SDDS_DATASET *SDDS_dataset);
318extern CONVERSION_DEFINITION *copyConversionDefinition(CONVERSION_DEFINITION *source);
319extern void expandConversionDefinitions(DEFINITION **definition, long *definitions, SDDS_DATASET *SDDS_dataset);
320extern void expandDefinitions(DEFINITION **definition, long *definitions, SDDS_DATASET *SDDS_dataset);
321
322extern CONVERSION_DEFINITION *process_conversion_definition(char **argument, long arguments);
323extern FILTER_DEFINITION *process_new_filter_definition(char **argument, long arguments);
324extern TIME_FILTER_DEFINITION *process_new_time_filter_definition(char **argument, long arguments);
325extern MATCH_DEFINITION *process_new_match_definition(char **argument, long arguments);
326extern RPNTEST_DEFINITION *process_new_rpntest_definition(char **argument, long arguments);
327extern NUMBERTEST_DEFINITION *process_new_numbertest_definition(char **argument, long arguments);
328extern RPNEXPRESSION_DEFINITION *process_new_rpnexpression_definition(char **argument, long arguments);
329extern CLIP_DEFINITION *process_new_clip_definition(char **argument, long arguments);
330extern FCLIP_DEFINITION *process_new_fclip_definition(char **argument, long arguments);
331extern SPARSE_DEFINITION *process_new_sparse_definition(char **argument, long arguments);
332extern SAMPLE_DEFINITION *process_new_sample_definition(char **argument, long arguments);
333extern SYSTEM_DEFINITION *process_new_system_definition(char **argument, long arguments);
334extern OUTPUT_REQUEST *process_output_request(char **argument, long arguments, OUTPUT_REQUEST *last_request);
335extern char *determine_item_name(char **argument, OUTPUT_REQUEST *last_request, long index);
336extern void set_up_output(char *filename, OUTPUT_REQUEST *output, LABEL_PARAMETER *label_parameter, long label_parameters,
337 long separate_tables, long announce_openings, SDDS_DATASET *SDDS_dataset);
338extern long complete_processing_definitions(PROCESSING_DEFINITION **processing_definition, long processing_definitions,
339 SDDS_DATASET *SDDS_dataset);
340
341extern long system_column_value(SDDS_DATASET *SDDS_dataset, char *target, char *source);
342extern long system_parameter_value(SDDS_DATASET *SDDS_dataset, char *target, char *source);
343extern long run_on_pipe(char *command, char *buffer, long buffer_length);
344
345/* used for redefining parameters and columns using sddsprocess-style commandline arguments */
346extern long SDDS_RedefineParameterCL(SDDS_DATASET *SDDS_dataset, char *parameter, char **argv, long argc);
347extern long SDDS_RedefineColumnCL(SDDS_DATASET *SDDS_dataset, char *column, char **argv, long argc);
348
349extern long edit_string(char *text, char *edit);
350
351extern long reformatString(char *buffer, long bufferSize, char *string, char *stringFormat,
352 char *doubleFormat, char *longFormat);
353
354extern long cast_column_value(SDDS_DATASET *SDDS_dataset, CAST_DEFINITION *cast);
355extern long cast_parameter_value(SDDS_DATASET *SDDS_dataset, CAST_DEFINITION *cast);
356
357void add_definition(DEFINITION **definition, long *definitions, void *structure, long type);
358long check_ifitems(SDDS_DATASET *SDDS_dataset, IFITEM_LIST *ifitem, long desired, long announce);
359long complete_cast_definition(SDDS_DATASET *SDDSout, CAST_DEFINITION *defi,
360 SDDS_DATASET *SDDSin);
361long edit_parameter_value(SDDS_DATASET *SDDS_dataset, char *target, char *source, char *edit_command);
362long edit_column_value(SDDS_DATASET *SDDS_dataset, char *target, char *source, char *edit_command);
363long scan_parameter_value(SDDS_DATASET *SDDS_dataset, char *target, char *source, char *format,
364 char *edit);
365long scan_column_value(SDDS_DATASET *SDDS_dataset, char *target, char *source, char *format,
366 char *edit);
367long print_parameter_value(SDDS_DATASET *SDDS_dataset, char *target, char **source, long sources, char *format);
368long print_column_value(SDDS_DATASET *SDDS_dataset, char *target, char **source, long sources, char *format);
369long format_parameter_value(SDDS_DATASET *SDDS_dataset, FORMAT_DEFINITION *definition);
370long format_column_value(SDDS_DATASET *SDDS_dataset, FORMAT_DEFINITION *definition);
371long ParameterScansAsNumber(SDDS_DATASET *dataset, char *name, short invert);
372
373/* rpn function for getting logical values */
374extern long pop_log(int32_t *logical);
375
376#define is_logic_character(c) ((c) == '|' || (c) == '&' || (c) == '!')
377
378void add_ifitem(IFITEM_LIST *ifitem, char **name, long names);
379
380#include "scan.h"
381long add_sddsfile_arguments(SCANNED_ARG **scanned, int argc);
long edit_string(char *text, char *edit)
Edits the provided text based on the specified edit commands.
Definition edit_string.c:75