Changeset 7974


Ignore:
Timestamp:
03/26/19 02:39:18 (4 weeks ago)
Author:
stefan
Message:

read arc file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libsrc/util/cosmos0putaway.c

    r7903 r7974  
    5454#include "earthworm_simple_funcs.h" 
    5555#include "chron3.h" 
     56#include "read_arc.h" 
     57  
    5658 
    5759#define TAG_FILE        '.tag'        /* file containing the last known file tag */ 
     
    5961 
    6062FILE    *COSMOS0fp;                      /* file pointer for the COSMOS0 file */ 
    61 FILE    *COSMOS0Libfp;                      /* file pointer for the COSMOS0 library file */ 
     63FILE    *COSMOS0Libfp;                   /* file pointer for the COSMOS0 library file */ 
     64FILE    *EVENTARCfp;                     /* file pointer to the seismic event file */ 
    6265 
    6366static  long   *COSMOS0Buffer;           /* write out COSMOS0 data as long integers */ 
     
    134137        char    COSMOS0File[4 * MAXTXT]; 
    135138        char    COSMOS0LibFile[4 * MAXTXT]; 
     139        char    EventArcFile[4 * MAXTXT]; 
    136140/*      char    c; */ 
    137141        char    year[5]; 
     
    146150        char    str[COSMOSLINELEN]; 
    147151        char    tempstr[COSMOSLINELEN]; 
    148  
    149152        int     LineNumber = 0; 
     153        time_t  rawtime; 
     154        struct tm * timeinfo; 
     155        size_t  nfbuffer;               /* Read bytes */ 
     156        char    *fbuffer;               /* File read buffer */ 
     157        static long      MaxMessageSize = 100000;  /* size (bytes) of largest msg */ 
     158        HypoArc                 arcmsg;                 /* ARC message */ 
     159        char            timestr[80];                                    /* Holds time messages */ 
     160        time_t          ot; 
     161        struct tm * (*timefunc)(const time_t *); 
     162        char            time_type[30] = { 0 };                                  /* Time type UTC or local */ 
     163 
    150164 
    151165        /* Grab the date-related substrings that we need for filenames. */ 
     
    202216                return EW_FAILURE; 
    203217        } 
    204  
     218        /* If there's enough time to implement, this filename should be able to be specified in the dot D file. */ 
     219        sprintf(EventArcFile, "%s/event.arc", LibDir); 
     220        if (debug == 1) 
     221                logit("t", "Attempting to open event file which always must be named event.arc and located in the LibraryDirectory. \n LibraryDirectory is currently configured as: %s\n", LibDir); 
     222 
     223        /* open Event file just for reading */ 
     224        if ((EVENTARCfp = fopen(EventArcFile, "r")) == NULL) 
     225        { 
     226                logit("e", "COSMOS0PA_next_ev: unable to open file %s: %s\nAn .arc file is required to set event information in the COSMOS file format.", 
     227                        EventArcFile, strerror(errno)); 
     228                return EW_FAILURE; 
     229        } 
     230 
     231        /* Read file to buffer 
     232        *********************/ 
     233        fbuffer = (char*)malloc(sizeof(char) * MaxMessageSize); /*check logic*/ 
     234        if (fbuffer == NULL) 
     235        { 
     236                logit("et", "Unable to allocate memory for filter buffer\n"); 
     237                return -1; 
     238        } 
     239 
     240        nfbuffer = fread(fbuffer, sizeof(char), 
     241                (size_t)MaxMessageSize, EVENTARCfp); 
     242        fclose(EVENTARCfp); // Done reading 
     243        if (nfbuffer == 0) 
     244        { 
     245                logit( "eto", "COSMOS0PA_next_ev: No data read from %s\n\nAn .arc file is required to set event information in the COSMOS file format.", 
     246                        EventArcFile); 
     247                return EW_FAILURE; 
     248        } 
     249        /* We should be able to do something like               origintime = arcmsg.sum.ot - GSEC1970; after parse_arc */ 
     250        if (debug == 1) logit("et", "COSMOS0PA_next_ev: Debug: Arc parsing %s\n", EventArcFile); 
     251        if (parse_arc(fbuffer, &arcmsg) != 0 ) 
     252        { 
     253                logit("et", "COSMOS0PA_next_ev: Error parsing %s\n", 
     254                        EventArcFile); 
     255        } 
     256        timefunc = localtime; 
    205257 
    206258        /* Copy the library file to the putaway file*/ 
     
    220272                            /* Maybe one day we'll read Hypoinverse output to detect events, but for now, this is blank */ 
    221273                        fprintf(COSMOS0fp, "Record of                 Earthquake of                                         \n"); 
     274                        break; 
     275                case 4: /*      4 9-42 Earthquake origin date and time, in UTC (i.e., GMT), with source agency; 43-80, 
     276                                        For use by preparing agency; may include note, e.g., “Preliminary Processing”, etc.*/ 
     277                        ot = (time_t)(arcmsg.sum.ot - GSEC1970);  
     278                        timeinfo = timefunc(&ot); 
     279                        strftime(timestr, 80, "%Y.%m.%d %H:%M:%S", timeinfo); // Prepare origin time 
     280                        sprintf(tempstr, "Origin: %s UTC", timestr); 
     281                        fprintf(COSMOS0fp, "%s\n", tempstr); 
    222282                        break; 
    223283                case 8: /*  Record information: 
     
    238298                        fprintf(COSMOS0fp, "%s\n", tempstr); 
    239299                        break; 
     300                case 11: /*"Record Information; Line 11 
     301                                        11-40 Processing/release date, time and agency. 
     302                                        48-80 Maximum of data series in file, units, and time of maximum (seconds after start).*" 
     303                                        What should I put here? An example file looks like: 
     304                                        "Processed: 06/17/18 12:00 PDT UCB                                   " 
     305                                */ 
     306                        time(&rawtime); 
     307                        timeinfo = gmtime(&rawtime); 
     308                        sprintf(tempstr, "Processed: %d/%d/%d %d:%d GMT                                       ",  
     309                                (timeinfo->tm_mon + 1), 
     310                                timeinfo->tm_mday, 
     311                                (timeinfo->tm_year + 1900), 
     312                                timeinfo->tm_hour,  
     313                                timeinfo->tm_min 
     314                        ); 
     315                        fprintf(COSMOS0fp, "%s\n", tempstr); 
     316                        break; 
    240317                default:  
    241318                        fprintf(COSMOS0fp, "%s", str);           
     
    244321        } 
    245322        fclose(COSMOS0Libfp); 
    246  
    247         /* WRITE Dynamic header; this probably can't be here though because we need to calculate these results */ 
    248         /* First we'll write a line that looks like this: */ 
    249         /* 17770    raw accel.pts, approx  178 secs, units = counts(50), Format = (7I11) */ 
    250         /*Line Cols 
    251         1st 1 - 8 Number of data points following; 10 - 21 Physical parameter of the data. 
    252         35 - 38 Approximate length of record(rounded to nearest sec; see Rhdr(66) for precise value). 
    253         52 - 58 Units of the data values(e.g., cm / sec2); 60 - 61 Index code for units 
    254         */ 
    255         /*sprintf(hour_line, "17770    raw accel.pts, approx  178 secs, units=counts (50),Format=(10I8)\r\n"); /* we want leading spaces */ 
    256         /* sprintf(tempstr, "%f", (ptrReq->reqEndtime - ptrReq->reqStarttime) * samplerate_but_we_dont_know_sr_here); */ 
    257  
    258  
    259         if (fwrite("17770    raw accel.pts,   approx 178 secs,  units=counts (50),  Format=(10I8)    \n", 82, 1, COSMOS0fp) != 1) 
    260         { 
    261                 logit("et", "COSMOS0PA_next: error writing COSMOS0 dynamic header line. \n"); 
    262                 return EW_FAILURE; 
    263         } 
    264  
    265323        return (EW_SUCCESS); 
    266324} 
     
    307365        int     gap_count = 0; 
    308366        int     i, j; 
     367        int     seconds = 0; 
    309368        int     s_place = 0; 
    310369        int     tabular_base; 
     
    317376        short  *s_data; 
    318377        int    current_int; 
     378        char    tempstr[COSMOSLINELEN]; 
     379        char    tempstr2[COSMOSLINELEN]; 
     380 
    319381 
    320382        /* Put this in the .d file once we know we want it. */ 
     
    363425        35 - 38 Approximate length of record(rounded to nearest sec; see Rhdr(66) for precise value). 
    364426        52 - 58 Units of the data values(e.g., cm / sec2); 60 - 61 Index code for units 
     427        71-80 Format of the data values written on the following lines. 
    365428        */ 
    366429        /*sprintf(hour_line, "17770    raw accel.pts, approx  178 secs, units=counts (50),Format=(10I8)\r\n"); /* we want leading spaces */ 
    367         /* sprintf(tempstr, "%f", (ptrReq->reqEndtime - ptrReq->reqStarttime) * samplerate_but_we_dont_know_sr_here); */ 
    368  
    369         //raw_counts = int((getThis->reqEndtime - getThis->reqStarttime ) * samprate); 
    370         if (fwrite("17770    raw accel.pts,   approx 178 secs,  units=counts (50),  Format=(10I8)    \n", 82, 1, COSMOS0fp) != 1) 
    371  
    372  
    373  
    374  
    375  
     430 
     431/*      sprintf(tempstr, "17770    raw accel.pts,   approx  178  secs, units=counts (50),Format=(10I8)   \n");*/ 
     432        sprintf(tempstr, "         raw accel.pts,   approx           , units=counts (50),Format=(10I8)    \n"); 
     433        raw_counts = (getThis->reqEndtime - getThis->reqStarttime ) * samprate; 
     434        sprintf(tempstr2, "%d", raw_counts); 
     435        strncpy(tempstr, tempstr2, strlen(tempstr2)); 
     436        seconds = (getThis->reqEndtime - getThis->reqStarttime); 
     437        sprintf(tempstr2, "%d secs", seconds); 
     438        strncpy(tempstr + 34, tempstr2, strlen(tempstr2)); 
     439        if (fwrite(tempstr, 81, 1, COSMOS0fp) != 1) 
     440        { 
     441                logit("et", "COSMOS0PA_next: error writing COSMOS0 dynamic header line. \n"); 
     442                return EW_FAILURE; 
     443        } 
    376444        begintime = starttime; 
    377445        /* datatype i4 = intel byte order 4 bytes, s2 = sparc byte order; 2 bytes */ 
     
    502570                        for the last sample*/ 
    503571                        while (currenttime < getThis->reqStarttime) { 
    504                                 currenttime = currenttime + 1 / wf->samprate; 
     572                                currenttime = currenttime + 1 / samprate; 
    505573                                j++; 
    506574                        } 
Note: See TracChangeset for help on using the changeset viewer.