示例#1
0
def create_figures():
    """Generate and save all relevant figures and text files."""
    parser = argparse.ArgumentParser()

    parser.add_argument('catalog1',
                        nargs='?',
                        type=str,
                        help='pick first catalog to download data from; to \
                        download data from all catalogs, use "preferred"; if \
                        using -sf, give catalog name')
    parser.add_argument('catalog2',
                        nargs='?',
                        type=str,
                        help='pick second catalog to download data from; to \
                        download data from all catalogs, use "preferred"; if \
                        using -sf, give catalog name')
    parser.add_argument('startyear',
                        nargs='?',
                        type=int,
                        help='pick starting year; if using -sf, give first \
                        year in catalog')
    parser.add_argument('endyear',
                        nargs='?',
                        type=int,
                        help='pick end year (to get a single year of data, \
                        enter same year as startyear); if using -sf, give \
                        last year in catalog')

    parser.add_argument('-mr',
                        '--magrange',
                        nargs=2,
                        type=float,
                        default=[-5, 12],
                        help='give the magnitude range for downloading data \
                        (default range is from -5 to 12)')
    parser.add_argument('-sf',
                        '--specifyfiles',
                        nargs=2,
                        type=str,
                        help='specify two existing .csv files to use')
    parser.add_argument('-fd',
                        '--forcedownload',
                        action='store_true',
                        help='forces downloading of data even if .csv file \
                        exists')
    parser.add_argument('-nm',
                        '--nomatches',
                        action='store_false',
                        help='do not include list of matching events in HTML \
                        report')

    args = parser.parse_args()

    minmag, maxmag = args.magrange

    if args.specifyfiles is None:

        if not args.catalog1:
            sys.stdout.write('No first catalog specified. Exiting...\n')
            sys.exit()
        elif not args.catalog2:
            sys.stdout.write('No second catalog specified. Exiting...\n')
            sys.exit()
        elif not args.startyear:
            sys.stdout.write('No starting year specified. Exiting...\n')
            sys.exit()
        elif not args.endyear:
            sys.stdout.write('No ending year specified. Exiting...\n')
            sys.exit()

        cat1, cat2 = args.catalog1.lower(), args.catalog2.lower()
        startyear, endyear = map(int, [args.startyear, args.endyear])
        download = args.forcedownload

        dirname = '%s-%s%s-%s' % (cat1, cat2, startyear, endyear)

        if download:
            try:
                os.makedirs(dirname)
            except OSError as exception:
                if exception.errno != errno.EEXIST:
                    raise
            datadf1 = qcu.get_data(cat1,
                                   dirname,
                                   startyear=startyear,
                                   endyear=endyear,
                                   minmag=minmag,
                                   maxmag=maxmag)
            datadf2 = qcu.get_data(cat2,
                                   dirname,
                                   startyear=startyear,
                                   endyear=endyear,
                                   minmag=minmag,
                                   maxmag=maxmag)
        else:
            # Python 2
            try:
                try:
                    datadf1 = pd.read_csv('%s/%s%s-%s.csv' %
                                          (dirname, cat1, startyear, endyear))
                    datadf2 = pd.read_csv('%s/%s%s-%s.csv' %
                                          (dirname, cat2, startyear, endyear))
                except IOError:
                    try:
                        os.makedirs(dirname)
                    except OSError as exception:
                        if exception.errno != errno.EEXIST:
                            raise
                    datadf1 = qcu.get_data(cat1,
                                           dirname,
                                           startyear=startyear,
                                           endyear=endyear,
                                           minmag=minmag,
                                           maxmag=maxmag)
                    datadf2 = qcu.get_data(cat2,
                                           dirname,
                                           startyear=startyear,
                                           endyear=endyear,
                                           minmag=minmag,
                                           maxmag=maxmag)
            # Python 3
            except:
                try:
                    datadf1 = pd.read_csv('%s/%s%s-%s.csv' %
                                          (dirname, cat1, startyear, endyear))
                    datadf2 = pd.read_csv('%s/%s%s-%s.csv' %
                                          (dirname, cat2, startyear, endyear))
                except FileNotFoundError:
                    try:
                        os.makedirs(dirname)
                    except OSError as exception:
                        if exception.errno != errno.EEXIST:
                            raise
                    datadf1 = qcu.get_data(cat1,
                                           dirname,
                                           startyear=startyear,
                                           endyear=endyear,
                                           minmag=minmag,
                                           maxmag=maxmag)
                    datadf2 = qcu.get_data(cat2,
                                           dirname,
                                           startyear=startyear,
                                           endyear=endyear,
                                           minmag=minmag,
                                           maxmag=maxmag)

    else:
        from shutil import copy2

        sfcat1, sfcat2 = args.specifyfiles
        cat1, cat2 = args.catalog1, args.catalog2
        dirname = '%s-%s%s-%s' % (cat1, cat2, args.startyear, args.endyear)

        try:
            os.makedirs(dirname)
        except OSError as exception:
            if exception.errno != errno.EEXIST:
                raise

        datadf1, datadf2 = pd.read_csv(sfcat1), pd.read_csv(sfcat2)
        try:
            copy2(sfcat1, dirname)
            copy2(sfcat2, dirname)
        except shutil.SameFileError:
            pass

    if len(datadf1) == 0:
        sys.stdout.write(('%s catalog has no data available for that time '
                          'period. Quitting...\n') % cat1.upper())
        sys.exit()

    if len(datadf2) == 0:
        sys.stdout.write(('%s catalog has no data available for that time '
                          'period. Quitting...\n') % cat2.upper())
        sys.exit()

    cat1, cat2 = cat1.upper(), cat2.upper()

    os.chdir(dirname)
    basic_cat_sum(datadf1, cat1, dirname)
    basic_cat_sum(datadf2, cat2, dirname)

    datadf1.loc[:, 'convtime'] = [
        ' '.join(x.split('T')) for x in datadf1['time'].tolist()
    ]
    datadf1.loc[:, 'convtime'] = datadf1['convtime'].astype('datetime64[ns]')
    datadf1.loc[:, 'time'] = [qcu.to_epoch(x) for x in datadf1['time']]
    datadf2.loc[:, 'convtime'] = [
        ' '.join(x.split('T')) for x in datadf2['time'].tolist()
    ]
    datadf2.loc[:, 'convtime'] = datadf2['convtime'].astype('datetime64[ns]')
    datadf2.loc[:, 'time'] = [qcu.to_epoch(x) for x in datadf2['time']]
    datadf1, datadf2 = qcu.trim_times(datadf1, datadf2)

    cat1ids, cat2ids, newcat1, newcat2 = match_events(datadf1, datadf2,
                                                      dirname)

    if len(cat1ids) == 0:
        sys.stdout.write('*** No matching events found ***\n')

    comp_criteria(datadf1, cat1, cat1ids, datadf2, cat2, cat2ids, dirname)
    #find_closest(datadf1, cat1, cat1ids, datadf2, dirname)

    map_events(newcat1, cat1, newcat2, cat2, cat1ids, cat2ids, dirname)
    map_unique_events(datadf1, cat1, cat1ids)
    map_unique_events(datadf2, cat2, cat2ids)
    make_az_dist(newcat1, cat1, newcat2, cat2, cat1ids, cat2ids, dirname)
    compare_params(newcat1, cat1, newcat2, cat2, cat1ids, cat2ids, 'mag',
                   dirname)
    compare_params(newcat1, cat1, newcat2, cat2, cat1ids, cat2ids, 'depth',
                   dirname)
    make_diff_hist(newcat1,
                   newcat2,
                   cat1ids,
                   cat2ids,
                   'time',
                   0.5,
                   dirname,
                   xlabel='%s-%s time differences (sec)' %
                   (cat1.upper(), cat2.upper()))
    make_diff_hist(newcat1,
                   newcat2,
                   cat1ids,
                   cat2ids,
                   'mag',
                   0.1,
                   dirname,
                   xlabel='%s-%s magnitude differences' %
                   (cat1.upper(), cat2.upper()))
    make_diff_hist(newcat1,
                   newcat2,
                   cat1ids,
                   cat2ids,
                   'depth',
                   2,
                   dirname,
                   xlabel='%s-%s depth differences (km)' %
                   (cat1.upper(), cat2.upper()))
    make_diff_hist(newcat1,
                   newcat2,
                   cat1ids,
                   cat2ids,
                   'distance',
                   2,
                   dirname,
                   xlabel='%s-%s distances (km)' %
                   (cat1.upper(), cat2.upper()))

    return dirname, args.nomatches
示例#2
0
def create_figures():
    """Generate and save all relevant figures and text files."""
    parser = argparse.ArgumentParser()

    parser.add_argument('catalog',
                        nargs='?',
                        type=str,
                        help='pick which catalog to download data from; to \
                        download data from all catalogs, use "preferred"')
    parser.add_argument('startyear',
                        nargs='?',
                        type=int,
                        help='pick starting year')
    parser.add_argument('endyear',
                        nargs='?',
                        type=int,
                        help='pick end year (to get a single year of data, \
                        enter same year as startyear)')

    parser.add_argument('-mr',
                        '--magrange',
                        type=float,
                        nargs=2,
                        default=[-5, 12],
                        help='give the magnitude range for downloading data \
                        (default range is from -5 to 12)')
    parser.add_argument('-tw',
                        '--timewindow',
                        type=float,
                        default=2,
                        help='change time window for finding duplicates \
                        (default is 2 seconds)')
    parser.add_argument('-dw',
                        '--distwindow',
                        type=float,
                        default=15,
                        help='change distance window for finding duplicates \
                        (default is 15 kilometers)')
    parser.add_argument('-sf',
                        '--specifyfile',
                        type=str,
                        help='specify existing .csv file to use')
    parser.add_argument('-fd',
                        '--forcedownload',
                        action='store_true',
                        help='forces downloading of data even if .csv file \
                        exists')

    args = parser.parse_args()

    minmag, maxmag = args.magrange

    if args.specifyfile is None:

        if not args.catalog:
            sys.stdout.write('No catalog specified. Exiting...\n')
            sys.exit()
        elif not args.startyear:
            sys.stdout.write('No starting year specified. Exiting...\n')
            sys.exit()
        elif not args.endyear:
            sys.stdout.write('No ending year specified. Exiting...\n')
            sys.exit()

        catalog = args.catalog.lower()
        startyear, endyear = map(int, [args.startyear, args.endyear])
        download = args.forcedownload

        dirname = '%s%s-%s' % (catalog, startyear, endyear) if catalog else\
                  'preferred%s-%s' % (startyear, endyear)

        if download:
            try:
                os.makedirs(dirname)
            except OSError as exception:
                if exception.errno != errno.EEXIST:
                    raise
            datadf = qcu.get_data(catalog,
                                  dirname,
                                  startyear=startyear,
                                  endyear=endyear,
                                  minmag=minmag,
                                  maxmag=maxmag)
        else:
            # Python 2
            try:
                try:
                    datadf = pd.read_csv('%s/%s.csv' % (dirname, dirname))
                except IOError:
                    try:
                        os.makedirs(dirname)
                    except OSError as exception:
                        if exception.errno != errno.EEXIST:
                            raise
                    datadf = qcu.get_data(catalog,
                                          dirname,
                                          startyear=startyear,
                                          endyear=endyear,
                                          minmag=minmag,
                                          maxmag=maxmag)
            # Python 3
            except:
                try:
                    datadf = pd.read_csv('%s/%s.csv' % (dirname, dirname))
                except FileNotFoundError:
                    try:
                        os.makedirs(dirname)
                    except OSError as exception:
                        if exception.errno != errno.EEXIST:
                            raise
                    datadf = qcu.get_data(catalog,
                                          dirname,
                                          startyear=startyear,
                                          endyear=endyear,
                                          minmag=minmag,
                                          maxmag=maxmag)

    else:
        from shutil import copy2
        dirname = '.'.join(args.specifyfile.split('.')[:-1])

        try:
            os.makedirs(dirname)
        except OSError as exception:
            if exception.errno != errno.EEXIST:
                raise

        datadf = pd.read_csv(args.specifyfile)
        copy2(args.specifyfile, dirname)

    if len(datadf) == 0:
        sys.stdout.write(('Catalog has no data available for that time period.'
                          ' Quitting...\n'))
        sys.exit()

    timewindow = args.timewindow
    distwindow = args.distwindow

    datadf = datadf.sort_values(by='time').reset_index(drop=True)
    datadf.loc[:, 'ms'] = datadf['time'].str[-4:-1].astype('float')

    os.chdir(dirname)
    dup1, dup2 = list_duplicates(datadf,
                                 dirname,
                                 timewindow=timewindow,
                                 distwindow=distwindow)
    basic_cat_sum(datadf, dirname, dup1, dup2, timewindow, distwindow)
    largest_ten(datadf, dirname)

    # generate figures
    map_detecs(datadf, dirname, title='Detection locations')
    map_detecs(datadf, dirname, mindep=50, title='Detections deeper than 50km')
    map_detec_nums(datadf, dirname, title='Detection density')
    make_hist(datadf,
              'mag',
              0.1,
              dirname,
              xlabel='Magnitude',
              title='Magnitude histogram')
    make_hist(datadf,
              'depth',
              1,
              dirname,
              xlabel='Depth (km)',
              title='Depth histogram')
    make_hist(datadf,
              'depth',
              0.5,
              dirname,
              maxval=20,
              xlabel='Depth (km)',
              title='Zoomed depth histogram')
    make_hist(datadf,
              'ms',
              20,
              dirname,
              xlabel='Milliseconds',
              title='Histogram of milliseconds')
    make_time_hist(datadf, 'hour', dirname, title='Events per Hour of the Day')
    make_time_hist(datadf, 'day', dirname, title='Events per Day')
    graph_time_sep(datadf, dirname)
    cat_mag_comp(datadf, dirname)
    graph_mag_time(datadf, dirname)
    cumul_moment_release(datadf, dirname)
    graph_event_types(datadf, dirname)
    cat_dup_search(datadf, dirname)
    med_mag(datadf, dirname)
    graph_mag_count(datadf, dirname)

    return dirname