diff options
Diffstat (limited to 'funtools/faq/tev.c')
-rw-r--r-- | funtools/faq/tev.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/funtools/faq/tev.c b/funtools/faq/tev.c new file mode 100644 index 0000000..9f9cf59 --- /dev/null +++ b/funtools/faq/tev.c @@ -0,0 +1,56 @@ +#include <stdlib.h> +#include <funtools.h> + +typedef struct evstruct{ + int x, y; + int pha; + float pi; + int region; +} *Ev, EvRec; + +int main(int argc, char **argv) +{ + int i, nev; + int pmod=16, put=1; + double pinc=0.1234; + char xbuf[32], ybuf[32]; + Ev ev; + Fun ofun; + + /* sanity check */ + if( argc < 3 ) return 1; + /* open new file for writing */ + if( !(ofun=FunOpen(argv[1], "w", NULL)) ){ + fprintf(stderr, "ERROR: can't open funtools file: %s\n", argv[1]); + return 1; + } + if( (nev = atoi(argv[2])) <=0 ) return 1; + ev = (Ev)calloc(1, sizeof(EvRec)); + /* The pair of numeric values specify the data value range, used to bin + x, y into an image. They are permitted but not needed for pi and pha */ + sprintf(xbuf, "J:1:%d", nev); + sprintf(ybuf, "J:1:%d", nev); + /* select columns to write */ + FunColumnSelect(ofun, sizeof(EvRec), NULL, + "x", xbuf, "w", FUN_OFFSET(Ev, x), + "y", ybuf, "w", FUN_OFFSET(Ev, y), + "pha", "J:1:16", "w", FUN_OFFSET(Ev, pha), + "pi", "E", "w", FUN_OFFSET(Ev, pi), + NULL); + /* write params to header; generally added before first event is written */ + FunParamPuti(ofun, "PMOD", 0, pmod, "modulus for pha generation", 1); + FunParamPutd(ofun, "PINC", 0, pinc, 7, "increment for pi generation", 1); + /* make up events */ + for(i=1; i<=nev; i++){ + ev->x = i; ev->y = nev-i+1; ev->pha = i % pmod; ev->pi = ev->pha + pinc; + /* write rows to output file -- this can be done in batches, of course */ + if( FunTableRowPut(ofun, ev, put, 0, NULL) != put ){ + fprintf(stderr, "ERROR: writing to funtools file: %s\n", argv[1]); + return 1; + } + } + if( ev) free(ev); + /* close file */ + FunClose(ofun); + return 0; +} |