source: trunk/src/seismic_processing/ewspectra/compute_spectra.c @ 4194

Revision 4194, 3.6 KB checked in by scott, 10 years ago (diff)

Ewspectra, compute_spectra & sniffspectra

Line 
1/******************************************************************************
2 *
3 *      File:                   compute_spectra.c
4 *
5 *      Function:               Post a message to request spectra data computation
6 *
7 *      Author(s):              Scott Hunter, ISTI
8 *
9 *      Source:                 Started anew.
10 *
11 *  Usage: compute_spectra <Ring> <start> <duration>
12 *             where <start> is YYYYMMDDHHMMSS
13 *               and <duration> is in seconds
14 *
15 *      Change History:
16 *                      4/26/11 Started source
17 *     
18 *****************************************************************************/
19
20#include <stdio.h>
21#include <stdlib.h>
22#include <time.h>
23#include <earthworm_defs.h>
24#include <math.h>
25#include <string.h>
26#include <kom.h>
27#include <ew_spectra.h>
28#include <transport.h>
29#include <ew_spectra_io.h>
30
31char *progname;
32
33/* Things to look up in the earthworm.h tables with getutil.c functions
34 **********************************************************************/
35static long          InRingKey;     /* key of transport ring for input    */
36static long          OutRingKey;    /* key of transport ring for output   */
37static unsigned char InstId;        /* local installation id              */
38static unsigned char MyModId;       /* Module Id for this program         */
39
40static  SHM_INFO  InRegion;     /* shared memory region to use for input  */
41static  SHM_INFO  OutRegion;    /* shared memory region to use for output */
42
43MSG_LOGO  GetLogo;                      /* requesting module,type,instid */
44pid_t MyPid;        /* Our own pid, sent with heartbeat for restart purposes */
45       
46time_t now;        /* current time, used for timing heartbeats */
47
48int static long    MaxMsgSize = 100;          /* max size for output msgs    */
49
50int main(int argc, char **argv)
51{
52/* Other variables: */
53   MSG_LOGO      logo;   /* logo of retrieved message             */
54   char outMsg[100];
55   double start, stop;
56       
57        /* Look up installations of interest
58        ************************************/
59        if ( GetLocalInst( &InstId ) != 0 ) {
60          fprintf( stderr, "error getting local installation id; exiting!\n" );
61          exit( -1 );
62        }
63       
64        if ((progname= strrchr(*argv, (int) '/')) != (char *) 0)
65                progname++;
66        else
67                progname= *argv;
68       
69    /* Check command line arguments */
70    if (argc != 4) {
71                fprintf (stderr, "Usage: %s ring start duration\n", progname);
72                return EW_FAILURE;
73    }
74       
75        if ( ( OutRingKey = GetKey(argv[1]) ) == -1 ) {
76                fprintf( stderr, "Invalid ring name <%s>; exiting!\n", argv[1]);
77                exit( -1 );
78        }
79
80        start = atof( argv[2] );
81        if ( start < 0 ) { 
82                start += time(NULL);
83        } else if ( EWSConvertTime (argv[2], &start) == EW_FAILURE ) {
84                fprintf( stderr, "illegal start time (%s); exiting!\n", argv[2]);
85                exit( -1 );
86        }
87        stop = start + atoi(argv[3]);
88        if ( start == stop ) {
89                fprintf( stderr, "illegal duration (%s); exiting!\n", argv[3] );
90                exit( -1 );
91        }
92
93        /* Build logo
94        *************/
95        logo.instid = InstId;
96        int getm = GetModId( "MOD_WILDCARD", &(logo.mod) );
97        int gett = GetType( "TYPE_COMPUTE_SPECTRA", &(logo.type) );
98        if ( getm || gett ) {
99                if ( getm )
100                        fprintf( stderr, "MOD_WILDCARD unknown\n" );
101                if ( gett )
102                        fprintf( stderr, "TYPE_COMPUTE_SPECTRA unknown\n" );
103                fprintf( stderr, "one or more missing definitions; exiting!\n" );
104                exit( -1 );
105        }
106
107        /* Attach to output ring
108        ************************/
109        tport_attach( &OutRegion, OutRingKey );
110       
111        /* Write out message
112        ********************/
113        sprintf( outMsg, "%s %s%c", argv[2], argv[3], 0 );
114        if( tport_putmsg( &OutRegion, &logo, strlen(outMsg)+1, outMsg ) != PUT_OK )
115        fprintf( stderr, "Error posting message\n" );
116    else
117        printf( "Writing '%s'\n", outMsg );
118               
119        /* Clean up after ourselves
120        ************************/
121        tport_detach( &OutRegion );
122}
Note: See TracBrowser for help on using the repository browser.