diff options
Diffstat (limited to 'funtools/faq/faq2.html')
-rw-r--r-- | funtools/faq/faq2.html | 381 |
1 files changed, 0 insertions, 381 deletions
diff --git a/funtools/faq/faq2.html b/funtools/faq/faq2.html deleted file mode 100644 index f5b424b..0000000 --- a/funtools/faq/faq2.html +++ /dev/null @@ -1,381 +0,0 @@ -<html><head><title>Funtools FAQ: Programming</title></head> - -<ol> -<li><a name="faq1"><b>What are the compile/link commands for various platforms?</b></a> -<P> -Assuming, for example, that funtools is installed in /soft/saord and that -gcc is the compiler being used: -<ol> -<li> Linux: -<BLOCKQUOTE><CODE> -<PRE> -gcc -g -I/soft/saord/include -c -o foo.o foo.c -gcc -g foo.o -o foo -L/soft/saord/lib -lfuntools -ldl -lm -</PRE> -</CODE></BLOCKQUOTE> -<li> Apple OS X: -<BLOCKQUOTE><CODE> -<PRE> -gcc -g -no-cpp-precomp -fno-common -I/soft/saord/include -c -o foo.o foo.c -gcc -g foo.o -o foo -L/soft/saord/lib -lfuntools -lm -</PRE> -</CODE></BLOCKQUOTE> -<li> Sun Solaris: -<BLOCKQUOTE><CODE> -<PRE> -gcc -g -no-cpp-precomp -fno-common -I/soft/saord/include -c -o foo.o foo.c -gcc -g foo.o -o foo -L/soft/saord/lib -lfuntools -lsocket -lnsl -ldl -lm -</PRE> -</CODE></BLOCKQUOTE> - -</ol> - -<li><a name="faq2"><b>What is the simplest possible program?</b></a> -<P> -<BLOCKQUOTE><CODE> -<PRE> -#include <stdlib.h> -#include <funtools.h> - -int main(int argc, char **argv) -{ - Fun fun; - - /* sanity check */ - if( argc < 2 ) return 1; - /* open file for reading */ - if( !(fun=FunOpen(argv[1], "r", NULL)) ){ - fprintf(stderr, "ERROR: can't open funtools file: %s\n", argv[1]); - return 1; - } - /* close file */ - FunClose(fun); - return 0; -} -</PRE> -</CODE></BLOCKQUOTE> - -<li><a name="faq1.1"><b>How do I read and display events?</b></a> -<P> -<BLOCKQUOTE><CODE> -<PRE># -#include <stdlib.h> -#include <funtools.h> - -typedef struct evstruct{ - double x, y; - int pi, pha; -} *Ev, EvRec; - -int main(int argc, char **argv) -{ - int i, got; - int maxrow=1024; - Ev ev, ebuf=NULL; - Fun fun; - - /* sanity check */ - if( argc < 2 ) return 1; - /* open file for reading */ - if( !(fun=FunOpen(argv[1], "r", NULL)) ){ - fprintf(stderr, "ERROR: can't open funtools file: %s\n", argv[1]); - return 1; - } - /* select columns to read (and data types to convert to) */ - got = FunColumnSelect(fun, sizeof(EvRec), NULL, - "x", "D", "r", FUN_OFFSET(Ev, x), - "y", "D", "r", FUN_OFFSET(Ev, y), - "pha", "J", "r", FUN_OFFSET(Ev, pha), - "pi", "J", "r", FUN_OFFSET(Ev, pi), - NULL); - /* read and process events */ - while( (ebuf=(void *)FunTableRowGet(fun, NULL, maxrow, NULL, &got)) && got ){ - for(i=0; i<got; i++){ - ev = (Ev)ebuf+i; - fprintf(stdout, "%.1f %.1f %d %d\n", ev->x, ev->y, ev->pha, ev->pi); - } - if( ebuf) free(ebuf); - } - /* close file */ - FunClose(fun); - return 0; -} -</PRE> -</CODE></BLOCKQUOTE> - -<li><a name="faq1.2"><b>How do I change the value of a single column in all events?</b></a> -<P> -<BLOCKQUOTE><CODE> -<PRE> -#include <stdlib.h> -#include <funtools.h> - -typedef struct evstruct{ - int pi; -} *Ev, EvRec; - -int main(int argc, char **argv) -{ - int i, got; - int maxrow=1024; - Ev ev, ebuf=NULL; - Fun fun, ofun; - - /* sanity check */ - if( argc < 3 ) return 1; - /* open file for reading */ - if( !(fun=FunOpen(argv[1], "r", NULL)) ){ - fprintf(stderr, "ERROR: can't open input funtools file: %s\n", argv[1]); - return 1; - } - /* open output file and inherit header params, columns, etc. from input */ - if( !(ofun=FunOpen(argv[2], "w", fun)) ){ - fprintf(stderr, "ERROR: can't open output funtools file: %s\n", argv[2]); - return 1; - } - /* select columns to read (and data types to convert to) */ - /* use "merge=update" to change value while keeping original data type */ - /* use "merge=replace" to change boh the value and data type */ - got = FunColumnSelect(fun, sizeof(EvRec), "merge=update", - "pi", "J", "rw", FUN_OFFSET(Ev, pi), - NULL); - /* read and process events */ - while( (ebuf=(void *)FunTableRowGet(fun, NULL, maxrow, NULL, &got)) && got ){ - for(i=0; i<got; i++){ - ev = (Ev)ebuf+i; - ev->pi = ev->pi + 1; - } - /* write rows to output file */ - if( FunTableRowPut(ofun, ebuf, got, 0, NULL) != got ){ - fprintf(stderr, "ERROR: writing to funtools file: %s\n", argv[2]); - return 1; - } - if( ebuf) free(ebuf); - } - /* close files */ - FunClose(ofun); - FunClose(fun); - return 0; -} -</PRE> -</CODE></BLOCKQUOTE> - -<li><a name="faq1.3"><b>How do I process events based on the region each is in?</b></a> -<P> -<BLOCKQUOTE><CODE> -<PRE> -#include <stdlib.h> -#include <funtools.h> - -typedef struct evstruct{ - int x, y; - int pi, pha; - int region; -} *Ev, EvRec; - -int main(int argc, char **argv) -{ - int i, got; - int maxrow=1024; - Ev ev, ebuf=NULL; - Fun fun; - - /* sanity check */ - if( argc < 2 ) return 1; - /* open file for reading */ - if( !(fun=FunOpen(argv[1], "r", NULL)) ){ - fprintf(stderr, "ERROR: can't open funtools file: %s\n", argv[1]); - return 1; - } - /* select columns to read (and data types to convert to) */ - /* specifying $REGION will retrieve the one-indexed region number */ - /* events passing the filter but not in a region will have value -1 */ - got = FunColumnSelect(fun, sizeof(EvRec), NULL, - "x", "J", "r", FUN_OFFSET(Ev, x), - "y", "J", "r", FUN_OFFSET(Ev, y), - "pha", "J", "r", FUN_OFFSET(Ev, pha), - "pi", "J", "r", FUN_OFFSET(Ev, pi), - "$REGION", "J", "r", FUN_OFFSET(Ev, region), - NULL); - /* read and process events */ - while( (ebuf=(void *)FunTableRowGet(fun, NULL, maxrow, NULL, &got)) && got ){ - for(i=0; i<got; i++){ - ev = (Ev)ebuf+i; - fprintf(stdout, "%4d %4d %3d %3d %4d\n", - ev->x, ev->y, ev->pha, ev->pi, ev->region); - } - if( ebuf) free(ebuf); - } - /* close file */ - FunClose(fun); - return 0; -} -</PRE> -</CODE></BLOCKQUOTE> - -<li><a name="faq1.4"><b>How do I make a FITS event file from a non-FITS source (and add my own params)?</b></a> -<P> -<BLOCKQUOTE><CODE> -<PRE> -#include <stdlib.h> -#include <funtools.h> - -typedef struct evstruct{ - int x, y; - int pha; - float pi; -} *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; -} -</PRE> -</CODE></BLOCKQUOTE> - -<li><a name="faq2.1"><b>How do I process an image in double float format?</b></a> -<P> -<BLOCKQUOTE><CODE> -<PRE> -#include <stdlib.h> -#include <funtools.h> - -int main(int argc, char **argv) -{ - int i, j, dim1, dim2; - double *buf; - Fun fun; - - /* sanity check */ - if( argc < 2 ) return 1; - /* open file for reading */ - if( !(fun=FunOpen(argv[1], "r", NULL)) ){ - fprintf(stderr, "ERROR: can't open funtools file: %s\n", argv[1]); - return 1; - } - /* extract (and bin, if necessary) data into a double prec. image buffer */ - if( !(buf = FunImageGet(fun, NULL, "bitpix=-64")) ){ - fprintf(stderr, "ERROR: can't get image: %s\n", argv[1]); - return 1; - } - /* get image dimensions after FunImageGet, in case an image section - was specified on the command line, which changes image dimensions */ - FunInfoGet(fun, FUN_SECT_DIM1, &dim1, FUN_SECT_DIM2, &dim2, 0); - /* loop through image */ - for(i=0; i<dim2; i++){ - for(j=0; j<dim1; j++){ - fprintf(stdout, "%.1f ", buf[i*dim1+j]); - } - fprintf(stdout, "\n"); - } - /* close file */ - FunClose(fun); - return 0; -} -</PRE> -</CODE></BLOCKQUOTE> - -<li><a name="faq2.1"><b>How do I process an image in its native format?</b></a> -<BLOCKQUOTE><CODE> -<PRE> -#include <funtools.h> - -int main(int argc, char **argv) -{ - int i, j, bitpix, dim1, dim2; - double *buf; - unsigned char *cbuf; - short *sbuf; - int *ibuf; - float *fbuf; - double *dbuf; - Fun fun; - - /* sanity check */ - if( argc < 2 ) return 1; - /* open file for reading */ - if( !(fun=FunOpen(argv[1], "r", NULL)) ){ - fprintf(stderr, "ERROR: can't open funtools file: %s\n", argv[1]); - return 1; - } - /* extract (and bin, if necessary) data into a buffer whose - data type is not specified and therefore is that of the file */ - if( !(buf = FunImageGet(fun, NULL, NULL)) ){ - fprintf(stderr, "ERROR: can't get image: %s\n", argv[1]); - return 1; - } - /* get image dimensions after FunImageGet, in case an image section - was specified on the command line, which changes image dimensions */ - FunInfoGet(fun, FUN_SECT_BITPIX, &bitpix, - FUN_SECT_DIM1, &dim1, FUN_SECT_DIM2, &dim2, 0); - /* set appropriate data type buffer to point to image buffer */ - switch(bitpix){ - case 8: cbuf = (unsigned char *)buf; break; - case 16: sbuf = (short *)buf; break; - case 32: ibuf = (int *)buf; break; - case -32: fbuf = (float *)buf; break; - case -64: dbuf = (double *)buf; break; - } - /* loop through image */ - for(i=0; i<dim2; i++){ - for(j=0; j<dim1; j++){ - switch(bitpix){ - case 8: fprintf(stdout, "%4d ", cbuf[i*dim1+j]); break; - case 16: fprintf(stdout, "%6d ", sbuf[i*dim1+j]); break; - case 32: fprintf(stdout, "%9d ", ibuf[i*dim1+j]); break; - case -32: fprintf(stdout, "%.2f ", fbuf[i*dim1+j]); break; - case -64: fprintf(stdout, "%.6f ", dbuf[i*dim1+j]); break; - } - } - fprintf(stdout, "\n"); - } - /* close file */ - FunClose(fun); - return 0; -} -</PRE> -</CODE></BLOCKQUOTE> - -</ol> |