diff options
author | William Joye <wjoye@cfa.harvard.edu> | 2016-11-02 19:11:06 (GMT) |
---|---|---|
committer | William Joye <wjoye@cfa.harvard.edu> | 2016-11-02 19:11:06 (GMT) |
commit | 33c55bd916dff8c4932b01c7db58f0103ac31c31 (patch) | |
tree | a4cdca3287dd2df5247ce8079c424ffa438b4c2e /ast/devtools/simtest.c | |
parent | 4121637f3d41d6dc23e6543a445b5a3aed9e6ddc (diff) | |
download | blt-33c55bd916dff8c4932b01c7db58f0103ac31c31.zip blt-33c55bd916dff8c4932b01c7db58f0103ac31c31.tar.gz blt-33c55bd916dff8c4932b01c7db58f0103ac31c31.tar.bz2 |
update ast
Diffstat (limited to 'ast/devtools/simtest.c')
-rw-r--r-- | ast/devtools/simtest.c | 864 |
1 files changed, 0 insertions, 864 deletions
diff --git a/ast/devtools/simtest.c b/ast/devtools/simtest.c deleted file mode 100644 index e36634c..0000000 --- a/ast/devtools/simtest.c +++ /dev/null @@ -1,864 +0,0 @@ -#define astCLASS simtest - -#include <stdio.h> -#include <string.h> -#include "globals.h" -#include "object.h" -#include "fitschan.h" -#include "mapping.h" -#include "cmpmap.h" -#include "error.h" -#include "winmap.h" -#include "tranmap.h" -#include "frameset.h" -#include "pointset.h" -#include "f77.h" -#include "memory.h" -#include "switchmap.h" -#include "unitmap.h" - -void DisplayList( AstMapping *, int, int, int * ); -void sink( const char * ); -const char *source( void ); -void tran( AstMapping *, int * ); -void diff( AstMapping *, int * ); -void tranm( AstMapping **, int *, int, int, int * ); - -extern F77_SUBROUTINE(kpg1_asreg)( INTEGER(status) ); - - -FILE *fd=NULL; - -main(){ - char file[ 50 ], text[ 100 ]; - const char *class, *enc0; - char *attrs, *kvalue; - AstWinMap *winmap; - AstFitsChan *fc, *fc2; - AstChannel *ch, *channel; - AstMapping *map, *map2, *tmap; - AstObject *obj, *obj2; - int opt, nin, nout, i; - DECLARE_INTEGER(lstatus); - int *status; - - lstatus = 0; - status = &lstatus; - -/* F77_CALL(kpg1_asreg)( INTEGER_ARG(&lstatus) ); */ - - printf( "Input FITS or AST file [| fitschan attrs] > "); - scanf( "%s", file ); - - attrs = strchr( file, '|' ); - if( attrs ) { - *attrs = 0; - attrs++; - } else { - attrs = "Carlin=0"; - } - - fd = fopen( file, "r" ); - if( fd ){ - ch = (AstChannel *) astFitsChan( NULL, sink, attrs, status ); - if( astOK ) { - fc = (AstFitsChan *) ch; - while( astOK && fgets( text, 100, fd ) ){ - astPutFits( fc, text, 0 ); - } - astClearCard( fc ); - - enc0 = astGetC( fc, "encoding" ); - printf("Using %s encoding\n", enc0 ); - obj = astRead( fc ); - } - if( !obj || !astOK ){ - printf("Attempting to read file %s as an AST file...\n", file ); - astClearStatus; - ch = astChannel( source, NULL, "", status ); - - fclose( fd ); - fd = NULL; - fd = fopen( file, "r" ); - obj = astRead( ch ); - if( obj != NULL ) { - fc = NULL; - } else { - astClearStatus; - printf("Reverting to FitsChan and using a dummy UnitMap. \n", file ); - obj = (AstObject *) astUnitMap( 1, "", status ); - astAnnul( ch ); - ch = (AstChannel *) fc; - } - - } - fclose( fd ); - fd = NULL; - } else { - astError( 1, "Cannot open file '%s'.", status, file ); - } - - class = obj ? astGetClass( obj ) : NULL; - if( obj && class ){ - printf( "%s %s has been read from file '%s'.\n", - strspn( class, "AEIOUaeiou" )?"An":"A", class, file ); - } - - if( obj && astIsAFitsChan( obj ) ) { - fc = (AstFitsChan *) obj; - astClearCard( fc ); - enc0 = astGetC( fc, "encoding" ); - printf("Using %s encoding\n", enc0 ); - obj = astRead( fc ); - } - - if( obj && astIsAMapping( obj ) ){ - map = (AstMapping *) obj; - - while( astOK ){ - printf("\n" - "0 - Quit\n" - "1 - Transform points\n" - "2 - Simplify\n" - "3 - Display\n" - "4 - Write\n" - "5 - Shift and scale\n" - "6 - Set mapping attributes\n" - "7 - Get mapping attributes\n" - "8 - Dump the FitsChan\n" - "9 - Differentiate\n" - "10 - Find a FITS keyword\n" - "\n" - "Option > " ); - opt = 0; - scanf( "%d", &opt ); - - if( opt == 0 ){ - break; - - } else if( opt == 1 ){ - tran( map, status ); - - } else if( opt == 2 ){ - map2 = astSimplify( map ); - map = astAnnul( map ); - map = map2; - obj = (AstObject *) map2; - - } else if( opt == 3 ){ - if( astIsAFrameSet( map ) ) { - tmap = astGetMapping( map, AST__BASE, AST__CURRENT ); - } else { - tmap = astClone( map ); - } - DisplayList( tmap, 1, astGetInvert( tmap ), status ); - tmap = astAnnul( tmap ); - - } else if( opt == 4 ){ - printf( "\n Output FITS file > "); - scanf( "%s", file ); - fd = fopen( file, "w" ); - if( fd ){ - if( fc ) { - printf(" Encoding (orig=%s)> ",enc0 ); - scanf( "%s", text ); - if( !strcmp( enc0, text ) && fc != NULL ){ - printf("Using existing FitsChan.\n"); - fc2 = astClone( fc ); - fc = astAnnul( fc ); - ch = NULL; - astClearCard( fc2 ); - astSet( fc2, "encoding=%s", status, text ); - } else { - printf("Creating new FitsChan.\n"); - fc2 = astFitsChan( NULL, sink, "encoding=%s", status, text ); - astPutFits( fc2, "NAXIS1 = 1", 1 ); - astPutFits( fc2, "NAXIS2 = 1", 1 ); - astPutFits( fc2, "NAXIS3 = 1", 1 ); - astPutFits( fc2, "NAXIS4 = 1", 1 ); - } - } else { - printf(" Encoding for new FitsChan > " ); - scanf( "%s", text ); - fc2 = astFitsChan( NULL, sink, "encoding=%s", status, text ); - astPutFits( fc2, "NAXIS1 = 1", 1 ); - astPutFits( fc2, "NAXIS2 = 1", 1 ); - astPutFits( fc2, "NAXIS3 = 1", 1 ); - astPutFits( fc2, "NAXIS4 = 1", 1 ); - } - if( !astWrite( fc2, obj ) ){ - printf("No object written to file '%s'.\n", file ); - } - fc2 = astAnnul( fc2 ); - fclose( fd ); - fd = NULL; - } else { - astError( 1, "Cannot open file '%s'.", status, file ); - } - - } else if( opt == 5 ){ - nin = astGetNin( map ); - winmap = astWinMap( nin, NULL, NULL, NULL, NULL, "", status ); - - printf( "\n Enter %d axis shift values > ", nin ); - for( i = 0; i < nin; i++ ) scanf( "%lg", (winmap->a) + i ); - - printf( "\n Enter %d axis scale values > ", nin ); - for( i = 0; i < nin; i++ ) scanf( "%lg", (winmap->b) + i ); - - if( !strcmp( class, "FrameSet" ) ){ - astInvert( winmap ); - astRemapFrame( obj, AST__BASE, winmap ); - } else { - map2 = (AstMapping *) astCmpMap( winmap, map, 1, "", status ); - map = astAnnul( map ); - map = map2; - obj = (AstObject *) map2; - } - winmap = astAnnul( winmap ); - - } else if( opt == 6 ) { - printf("Enter attribute specifications: "); - scanf( "%s", text ); - astSet( map, text, status ); - if( !astOK ) astClearStatus; - - } else if( opt == 7 ) { - printf("Enter attribute name: "); - scanf( "%s", text ); - printf( "%s = %s\n", text, astGetC( map, text ) ); - if( !astOK ) astClearStatus; - - } else if( opt == 8 ) { - printf( "\n Output text file > "); - scanf( "%s", file ); - fd = fopen( file, "w" ); - if( fd ){ - channel = astChannel( NULL, sink, "Full=1", status ); - astDump( ch, channel ); - channel = astAnnul( channel ); - fclose( fd ); - fd = NULL; - } else { - printf("Failed to open output file '%s'.\n", file ); - perror(" "); - } - - } else if( opt == 9 ){ - diff( map, status ); - - } else if( opt == 10 ){ - if( fc ) { - printf("Enter FITS keyword: "); - scanf( "%s", text ); - if( astGetFitsS( fc, text, &kvalue ) ) { - printf("%s = '%s'\n", text, kvalue ); - } else { - printf("%s not found\n", text ); - } - } else { - printf("No FITS keywords are available\n", text ); - } - } - } - - } else { - astError( 1, "Object should be a Mapping).", status ); - } - - if( ch ) ch = astAnnul( ch ); - obj = astAnnul( obj ); - -} - -void DisplayList( AstMapping *map0, int series, int invert, int *status ){ - int nmap, i, inv, res, junk; - AstMapping *mi, *mf, **map_list, *m, *m2, *map, *smap, *tm1, *tm2; - AstCmpMap *cm; - AstTranMap *tm; - AstChannel *channel; - int invi, invf, *invert_list, opt, old_inv, nin, in[20], *out, nout; - int isswitch, tfwd, tinv; - const char *class; - char file[ 50 ]; - double dv; - - nmap = 0; - map_list = NULL; - invert_list = NULL; - map = astClone( map0 ); - - isswitch = astIsASwitchMap( map ); - if( isswitch ) { - astSwitchList( (AstSwitchMap *) map, invert, &nmap, &map_list, - &invert_list, status ); - } else { - astMapList( map, series, invert, &nmap, &map_list, &invert_list ); - } - - while( 1 ){ - if( isswitch ) { - printf("\nSwitchMap: (fwd selector, inv selector, routes )\n" ); - printf(" -3 - <transform points>\n"); - } else { - printf("\nMappings in %s:\n", series?"series":"parallel" ); - printf(" -8 - <invert>\n"); - printf(" -7 - <write list to text file>\n"); - printf(" -6 - <split>\n"); - printf(" -5 - <simplify whole list>\n"); - printf(" -4 - <merge a single mapping>\n"); - printf(" -3 - <transform points>\n"); - printf(" -2 - <show to text file>\n"); - printf(" -1 - <show to screen>\n"); - } - printf(" 0 - <up>\n"); - for( i = 0; i < nmap; i++ ){ - m = map_list[ i ]; - class = m ? astGetClass( m ) :"(NULL)"; - printf( " %d - %s\n", i + 1, class ); - } - printf("\n Option > ", 0 ); - opt = 0; - scanf("%d", &opt ); - - if ( opt == -8 ) { - - for( i = 0; i < nmap; i++ ) map_list[ i ] = astAnnul( map_list[ i ] ); - map_list = astFree( map_list ); - invert_list = astFree( invert_list ); - nmap = 0; - - invert = ( invert == 0 ); - if( isswitch ) { - astSwitchList( (AstSwitchMap *) map, invert, &nmap, - &map_list, &invert_list, status ); - } else { - astMapList( map, series, invert, &nmap, &map_list, &invert_list ); - } - - } else if ( opt == -7 && !isswitch ) { - printf( "\n Output text file > "); - scanf( "%s", file ); - fd = fopen( file, "w" ); - if( fd ){ - channel = astChannel( NULL, sink, "", status ); - for( i = 0; i < nmap; i++ ) { - inv = astGetInvert( map_list[ i ] ); - astSetInvert( map_list[ i ], invert_list[ i ] ); - astDump( map_list[ i ], channel ); - astSetInvert( map_list[ i ], inv ); - } - channel = astAnnul( channel ); - fclose( fd ); - fd = NULL; - } else { - printf("Failed to open output file.\n" ); - } - - } else if( opt == -6 && !isswitch ) { - old_inv = astGetInvert( map ); - astSetInvert( map, invert ); - - printf( "\n Pick how many input axes (max=%d)? > ", - astGetNin( map ) ); - scanf( "%lg", &dv ); - nin = dv; - - printf( "\n Enter %d zero-based axis indices > ", nin ); - for( i = 0; i < nin; i++ ) { - scanf( "%lg", &dv ); - in[ i ] = dv; - } - - out = astMapSplit( map, nin, in, &smap ); - astSetInvert( map, old_inv ); - - if( out ) { - printf( "Corresponding outputs are: " ); - nout = astGetNout( smap ); - for( i = 0; i < nout; i++ ) printf( "%d ", out[ i ] ); - printf("\n"); - out = astFree( out ); - map = astAnnul( map ); - map = smap; - } else { - printf( "Selected inputs do not correspond to a subset of outputs\n"); - } - - for( i = 0; i < nmap; i++ ) map_list[ i ] = astAnnul( map_list[ i ] ); - map_list = astFree( map_list ); - invert_list = astFree( invert_list ); - - nmap = 0; - astMapList( map, series, invert, &nmap, &map_list, &invert_list ); - - } else if( opt == -5 && !isswitch ) { - old_inv = astGetInvert( map ); - astSetInvert( map, invert ); - smap = astSimplify( map ); - if( smap == map ) printf("\n No simplification performed\n" ); - astSetInvert( map, old_inv ); - map = astAnnul( map ); - map = smap; - - for( i = 0; i < nmap; i++ ) map_list[ i ] = astAnnul( map_list[ i ] ); - map_list = astFree( map_list ); - invert_list = astFree( invert_list ); - - nmap = 0; - astMapList( map, series, invert, &nmap, &map_list, &invert_list ); - - } else if( opt == -4 && !isswitch ) { - printf("\n Mapping index > ", 0 ); - scanf("%d", &i ); - i--; - res = astMapMerge( map_list[ i ], i, series, &nmap, - &map_list, &invert_list ); - if( res != -1 ) { - printf( "Index of first modified Mapping: %d\n", res + 1 ); - } else { - printf( "No mappings modified\n" ); - } - - } else if( opt == -3 && series && !isswitch ) { - - if( invert == astGetInvert( map ) ) { - tfwd = astGetTranForward( map ); - tinv = astGetTranInverse( map ); - } else { - tinv = astGetTranForward( map ); - tfwd = astGetTranInverse( map ); - } - - if( !tfwd ) { - printf( "\n No forward transformation available\n" ); - - } else if( !tinv ) { - printf( "\n No inverse transformation available\n" ); - tranm( map_list, invert_list, nmap, 0, status ); - - } else { - tranm( map_list, invert_list, nmap, 1, status ); - - } - - } else if( opt == -3 && isswitch ) { - - if( invert == astGetInvert( map ) ) { - tfwd = astGetTranForward( map ); - tinv = astGetTranInverse( map ); - } else { - tinv = astGetTranForward( map ); - tfwd = astGetTranInverse( map ); - } - - if( !tfwd ) { - printf( "\n No forward transformation available\n" ); - - } else if( !tinv ) { - printf( "\n No inverse transformation available\n" ); - tranm( &map, &invert, 1, 0, status ); - - } else { - tranm( &map, &invert, 1, 1, status ); - - } - - } else if( opt == -3 && !series && !isswitch ) { - old_inv = astGetInvert( map ); - astSetInvert( map, invert ); - tran( map, status ); - astSetInvert( map, old_inv ); - - } else if ( opt == -2 && !isswitch ) { - - for( i = 0; i < nmap; i++ ) { - inv = astGetInvert( map_list[ i ] ); - astSetInvert( map_list[ i ], invert_list[ i ] ); - if( i == 0 ) { - tm1 = astClone( map_list[ 0 ] ); - } else { - tm2 = (AstMapping *) astCmpMap( tm1, map_list[ i ], series, "", status ); - tm1 = astAnnul( tm1 ); - tm1 = tm2; - } - astSetInvert( map_list[ i ], inv ); - } - - printf( "\n Output text file > "); - scanf( "%s", file ); - fd = fopen( file, "w" ); - if( fd ){ - channel = astChannel( NULL, sink, "", status ); - old_inv = astGetInvert( tm1 ); - astSetInvert( tm1, invert ); - astDump( tm1, channel ); - astSetInvert( tm1, old_inv ); - channel = astAnnul( channel ); - fclose( fd ); - fd = NULL; - } else { - printf("Failed to open output file.\n" ); - } - tm1= astAnnul( tm1 ); - - } else if ( opt == -1 && !isswitch ) { - - - for( i = 0; i < nmap; i++ ) { - inv = astGetInvert( map_list[ i ] ); - astSetInvert( map_list[ i ], invert_list[ i ] ); - if( i == 0 ) { - tm1 = astClone( map_list[ 0 ] ); - } else { - tm2 = (AstMapping *) astCmpMap( tm1, map_list[ i ], - series, "", status ); - tm1 = astAnnul( tm1 ); - tm1 = tm2; - } - astSetInvert( map_list[ i ], inv ); - } - - channel = astChannel( NULL, NULL, "Full=1", status ); - old_inv = astGetInvert( tm1); - astSetInvert( tm1, invert ); - astDump( tm1, channel ); - astSetInvert( tm1, old_inv ); - channel = astAnnul( channel ); - tm1= astAnnul( tm1 ); - - } else if( opt > 0 && opt <= nmap && map_list[ opt - 1 ] ){ - m2 = map_list[ opt - 1 ]; - inv = invert_list[ opt - 1 ]; - class = astGetClass( m2 ); - - if( m2 && astIsAFrameSet( m2 ) ){ - m = astGetMapping( m2, AST__BASE, AST__CURRENT ); - class = astGetClass( m ); - - } else if( astIsATranMap( m2 ) ){ - - astDecompose( m2, &mf, &mi, &invf, &invi, &junk ); - - if( inv ) { - m = mi; - inv = invi; - } else { - m = mf; - inv = invf; - } - class = astGetClass( m ); - - } else { - m = astClone( m2 ); - } - - if( strcmp( class, "CmpMap" ) ){ - DisplayList( m, 1, inv, status ); - } else { - cm = (AstCmpMap *) m; - DisplayList( m, cm->series, inv, status ); - } - } else { - break; - } - } - - for( i = 0; i < nmap; i++ ) map_list[ i ] = astAnnul( map_list[ i ] ); - map_list = astFree( map_list ); - invert_list = astFree( invert_list ); - nmap = 0; - -} - - -void sink( const char *text ){ - if( fd && text ) fprintf( fd, "%s\n", text ); -} - -const char *source( void ){ - static char text[2000]; - static char *ptext; - if( fd ) { - ptext = fgets( text, 2000, fd ); - } else { - ptext = NULL; - } - return ptext; -} - -void tran( AstMapping *map, int *status ){ - char text[2000]; - AstFrame *infrm, *outfrm; - AstPointSet *pset1, *pset2; - double **ptr1, **ptr2; - int nin, nout, i, ok; - - if( !astGetTranForward( map ) ) { - printf( "\n No forward transformation available\n" ); - return; - } - - if( !astGetTranInverse( map ) ) { - printf( "\n No inverse transformation available\n" ); - } - - nin = astGetNin( map ); - nout = astGetNout( map ); - pset1 = astPointSet( 1, nin, "", status ); - ptr1 = astGetPoints( pset1 ); - pset2 = astPointSet( 1, nout, "", status ); - ptr2 = astGetPoints( pset2 ); - - if( astIsAFrameSet( map ) ) { - infrm = astGetFrame( map, AST__BASE ); - outfrm = astGetFrame( map, AST__CURRENT ); - } else if( astIsAFrame( map ) ) { - infrm = (AstFrame *) map; - outfrm = (AstFrame *) map; - } else { - infrm = NULL; - outfrm = NULL; - } - - if( astOK ){ - ok = 0; - if( infrm != NULL ) { - ok = 1; - for( i = 0; i < nin; i++ ) { - printf( "\n Enter %s value (or <bad>) > ", astGetLabel( infrm, i ) ); - scanf( "%s", text ); - if( !astUnformat( infrm, i, text, ptr1[ i ] ) ) { - ok = 0; - printf( "Bad formatted value supplied! Now try unformatted axis values...\n"); - break; - } - } - } - - if( !ok ) { - printf( "\n Enter %d axis values (BAD=999) > ", nin ); - for( i = 0; i < nin; i++ ) { - scanf( "%lg", ptr1[ i ] ); - if( ptr1[ i ][ 0 ] == 999.0 ) ptr1[ i ][ 0 ] = AST__BAD; - } - } - - astTransform( map, pset1, 1, pset2 ); - printf( "\n Forward: [ " ); - for( i = 0; i < nin; i++ ) { - if( ptr1[ i ][ 0 ] == AST__BAD ) { - printf( "999.0 " ); - } else { - printf( "%.*g ", DBL_DIG, ptr1[ i ][ 0 ] ); - } - } - - printf( "] -> [ " ); - for( i = 0; i < nout; i++ ) { - if( ptr2[ i ][ 0 ] == AST__BAD ) { - printf( "999.0 " ); - } else { - printf( "%.*g ", DBL_DIG, ptr2[ i ][ 0 ] ); - } - } - printf( "]\n" ); - - if( infrm != NULL && outfrm != NULL ) { - printf( " ( " ); - for( i = 0; i < nin; i++ ) { - printf( "%s ", astFormat( infrm, i, ptr1[ i ][ 0 ] ) ); - } - printf( ") -> ( " ); - for( i = 0; i < nout; i++ ) { - printf( "%s ", astFormat( outfrm, i, ptr2[ i ][ 0 ] ) ); - } - printf( ") formatted\n" ); - } - - - if( astGetTranInverse( map ) ) { - astTransform( map, pset2, 0, pset1 ); - printf( "\n Inverse: [ " ); - for( i = 0; i < nout; i++ ) { - if( ptr2[ i ][ 0 ] == AST__BAD ) { - printf( "999.0 " ); - } else { - printf( "%.*g ", DBL_DIG, ptr2[ i ][ 0 ] ); - } - } - - printf( "] -> [ " ); - for( i = 0; i < nin; i++ ) { - if( ptr1[ i ][ 0 ] == AST__BAD ) { - printf( "999.0 " ); - } else { - printf( "%.*g ", DBL_DIG, ptr1[ i ][ 0 ] ); - } - } - printf( "]\n" ); - - - if( infrm != NULL && outfrm != NULL ) { - printf( " ( " ); - for( i = 0; i < nout; i++ ) { - printf( "%s ", astFormat( outfrm, i, ptr2[ i ][ 0 ] ) ); - } - printf( ") -> ( " ); - for( i = 0; i < nin; i++ ) { - printf( "%s ", astFormat( infrm, i, ptr1[ i ][ 0 ] ) ); - } - printf( ") formatted\n" ); - } - } - } - pset1 = astAnnul( pset1 ); - pset2 = astAnnul( pset2 ); -} - -void tranm( AstMapping **map, int *inv_list, int nmap, int inv, int *status ){ - AstPointSet *pset1, *pset2; - double **ptr1, **ptr2; - int nin, nout, i, j, inv0; - - inv0 = astGetInvert( map[ 0 ] ); - astSetInvert( map[ 0 ], inv_list[ 0 ] ); - nin = astGetNin( map[ 0 ] ); - astSetInvert( map[ 0 ], inv0 ); - - pset1 = astPointSet( 1, nin, "", status ); - ptr1 = astGetPoints( pset1 ); - - if( astOK ){ - printf( "\n Enter %d axis values (BAD=999) > ", nin ); - for( i = 0; i < nin; i++ ) { - scanf( "%lg", ptr1[ i ] ); - if( ptr1[ i ][ 0 ] == 999.0 ) ptr1[ i ][ 0 ] = AST__BAD; - } - - printf("Forward...\n"); - for( j=0; j<nmap; j++ ) { - inv0 = astGetInvert( map[ j ] ); - astSetInvert( map[ j ], inv_list[ j ] ); - - nout = astGetNout( map[ j ] ); - pset2 = astPointSet( 1, nout, "", status ); - ptr2 = astGetPoints( pset2 ); - - astTransform( map[ j ], pset1, 1, pset2 ); - - printf( " Mapping %d gave [ ", j+1 ); - for( i = 0; i < nout; i++ ) { - if( ptr2[ i ][ 0 ] == AST__BAD ) { - printf( "999.0 " ); - } else { - printf( "%.*g ", DBL_DIG, ptr2[ i ][ 0 ] ); - } - } - - printf( "]\n" ); - - pset1 = astAnnul( pset1 ); - astSetInvert( map[ j ], inv0 ); - - pset1 = pset2; - ptr1 = ptr2; - nin = nout; - } - - printf("Inverse...\n"); - - for( j=nmap - 1; j>=0 && inv; j-- ) { - inv0 = astGetInvert( map[ j ] ); - astSetInvert( map[ j ], inv_list[ j ] ); - - nin = astGetNin( map[ j ] ); - pset2 = astPointSet( 1, nin, "", status ); - ptr2 = astGetPoints( pset2 ); - - astTransform( map[ j ], pset1, 0, pset2 ); - - printf( " Mapping %d gave [ ", j+1 ); - for( i = 0; i < nin; i++ ) { - if( ptr2[ i ][ 0 ] == AST__BAD ) { - printf( "999.0 " ); - } else { - printf( "%.*g ", DBL_DIG, ptr2[ i ][ 0 ] ); - } - } - printf( "]\n" ); - - pset1 = astAnnul( pset1 ); - astSetInvert( map[ j ], inv0 ); - - pset1 = pset2; - ptr1 = ptr2; - nout = nin; - } - - pset1 = astAnnul( pset1 ); - - } -} - - - - -void diff( AstMapping *map, int *status ){ - char text[200]; - AstFrame *infrm, *outfrm; - int nin, nout, i, ok, ax1, ax2; - double at[2000]; - - - nin = astGetNin( map ); - nout = astGetNout( map ); - - if( astIsAFrameSet( map ) ) { - infrm = astGetFrame( map, AST__BASE ); - outfrm = astGetFrame( map, AST__CURRENT ); - } else if( astIsAFrame( map ) ) { - infrm = (AstFrame *) map; - outfrm = (AstFrame *) map; - } else { - infrm = NULL; - outfrm = NULL; - } - - if( astOK ){ - ok = 0; - if( infrm != NULL ) { - ok = 1; - for( i = 0; i < nin; i++ ) { - printf( "\n Enter %s value (or <bad>) > ", astGetLabel( infrm, i ) ); - scanf( "%s", text ); - if( !astUnformat( infrm, i, text, at + i ) ) { - ok = 0; - printf( "Bad formatted value supplied! Now try unformatted axis values...\n"); - break; - } - } - } - - if( !ok ) { - printf( "\n Enter %d axis values (BAD=999) > ", nin ); - for( i = 0; i < nin; i++ ) { - scanf( "%lg", at + i ); - if( at[ i ] == 999.0 ) at[ i ] = AST__BAD; - printf("(got %.*g)\n", DBL_DIG, at[ i ] ); - } - - } - - for( i = 0; i < nin; i++ ) { - printf("(%d: got %.*g)\n", i, DBL_DIG, at[ i ] ); - } - - printf( "\n Enter output to differentiate (zero-based index): > " ); - scanf( "%d", &ax1 ); - printf( "\n Enter input to vary (zero-based index): > " ); - scanf( "%d", &ax2 ); - printf( "%.*g \n", DBL_DIG, astRate( map, at, ax1, ax2 ) ); - } -} - |