Exemplo n.º 1
0
 def dumpf(self, file):
     file.write('name = %s\n' % self.name)
     file.write('time = %s\n' % util.gmctime(self.time))
     if self.lat is not None:
         file.write('latitude = %g\n' % self.lat)
     if self.lon is not None:
         file.write('longitude = %g\n' % self.lon)
     if self.magnitude is not None:
         file.write('magnitude = %g\n' % self.magnitude)
         file.write('moment = %g\n' %
                    moment_tensor.magnitude_to_moment(self.magnitude))
     if self.depth is not None:
         file.write('depth = %g\n' % self.depth)
     if self.region is not None:
         file.write('region = %s\n' % self.region)
     if self.catalog is not None:
         file.write('catalog = %s\n' % self.catalog)
     if self.moment_tensor is not None:
         m = self.moment_tensor.m()
         sdr1, sdr2 = self.moment_tensor.both_strike_dip_rake()
         file.write((
             'mnn = %g\nmee = %g\nmdd = %g\nmne = %g\nmnd = %g\nmed = %g\n'
             +
             'strike1 = %g\ndip1 = %g\nrake1 = %g\nstrike2 = %g\ndip2 = %g\nrake2 = %g\n'
         ) % ((m[0, 0], m[1, 1], m[2, 2], m[0, 1], m[0, 2], m[1, 2]) +
              sdr1 + sdr2))
     if self.duration is not None:
         file.write('duration = %g\n' % self.duration)
Exemplo n.º 2
0
 def dumpf(self, file):
     file.write("name = %s\n" % self.name)
     file.write("time = %s\n" % util.gmctime(self.time))
     if self.lat is not None:
         file.write("latitude = %g\n" % self.lat)
     if self.lon is not None:
         file.write("longitude = %g\n" % self.lon)
     if self.magnitude is not None:
         file.write("magnitude = %g\n" % self.magnitude)
         file.write("moment = %g\n" % moment_tensor.magnitude_to_moment(self.magnitude))
     if self.depth is not None:
         file.write("depth = %g\n" % self.depth)
     if self.region is not None:
         file.write("region = %s\n" % self.region)
     if self.catalog is not None:
         file.write("catalog = %s\n" % self.catalog)
     if self.moment_tensor is not None:
         m = self.moment_tensor.m()
         sdr1, sdr2 = self.moment_tensor.both_strike_dip_rake()
         file.write(
             (
                 "mnn = %g\nmee = %g\nmdd = %g\nmne = %g\nmnd = %g\nmed = %g\n"
                 + "strike1 = %g\ndip1 = %g\nrake1 = %g\nstrike2 = %g\ndip2 = %g\nrake2 = %g\n"
             )
             % ((m[0, 0], m[1, 1], m[2, 2], m[0, 1], m[0, 2], m[1, 2]) + sdr1 + sdr2)
         )
     if self.duration is not None:
         file.write("duration = %g\n" % self.duration)
Exemplo n.º 3
0
class Event:
    def __init__(self,
                 lat=0.,
                 lon=0.,
                 time=0.,
                 name='',
                 depth=None,
                 magnitude=None,
                 region=None,
                 load=None,
                 loadf=None,
                 catalog=None,
                 moment_tensor=None,
                 duration=None):
        if load is not None:
            self.load(load)
        elif loadf is not None:
            self.loadf(loadf)
        else:
            self.lat = lat
            self.lon = lon
            self.time = time
            self.name = name
            self.depth = depth
            self.magnitude = magnitude
            self.region = region
            self.catalog = catalog
            self.moment_tensor = moment_tensor
            self.duration = duration

    def time_as_string(self):
        return util.gmctime(self.time)

    def set_name(self, name):
        self.name = name

    def __str__(self):
        return '%s %s %s %g %g %s %s' % (self.name, util.gmctime(
            self.time), self.magnitude, self.lat, self.lon, self.depth,
                                         self.region)

    def dump(self, filename):
        file = open(filename, 'w')
        self.dumpf(file)
        file.close()

    def dumpf(self, file):
        file.write('name = %s\n' % self.name)
        file.write('time = %s\n' % util.gmctime(self.time))
        if self.lat is not None:
            file.write('latitude = %g\n' % self.lat)
        if self.lon is not None:
            file.write('longitude = %g\n' % self.lon)
        if self.magnitude is not None:
            file.write('magnitude = %g\n' % self.magnitude)
            file.write('moment = %g\n' %
                       moment_tensor.magnitude_to_moment(self.magnitude))
        if self.depth is not None:
            file.write('depth = %g\n' % self.depth)
        if self.region is not None:
            file.write('region = %s\n' % self.region)
        if self.catalog is not None:
            file.write('catalog = %s\n' % self.catalog)
        if self.moment_tensor is not None:
            m = self.moment_tensor.m()
            sdr1, sdr2 = self.moment_tensor.both_strike_dip_rake()
            file.write((
                'mnn = %g\nmee = %g\nmdd = %g\nmne = %g\nmnd = %g\nmed = %g\n'
                +
                'strike1 = %g\ndip1 = %g\nrake1 = %g\nstrike2 = %g\ndip2 = %g\nrake2 = %g\n'
            ) % ((m[0, 0], m[1, 1], m[2, 2], m[0, 1], m[0, 2], m[1, 2]) +
                 sdr1 + sdr2))
        if self.duration is not None:
            file.write('duration = %g\n' % self.duration)

    @staticmethod
    def unique(events,
               deltat=10.,
               group_cmp=(lambda a, b: cmp(a.catalog, b.catalog))):
        groups = Event.grouped(events, deltat)

        events = []
        for group in groups:
            if group:
                group.sort(group_cmp)
                events.append(group[-1])

        return events

    @staticmethod
    def grouped(events, deltat=10.):
        events = list(events)
        groups = []
        for ia, a in enumerate(events):
            groups.append([])
            haveit = False
            for ib, b in enumerate(events[:ia]):
                if abs(b.time - a.time) < deltat:
                    groups[ib].append(a)
                    haveit = True
                    break

            if not haveit:
                groups[ia].append(a)

        return [g for g in groups if g]

    @staticmethod
    def dump_catalog(events, filename):
        file = open(filename, 'w')
        try:
            i = 0
            for ev in events:
                if i != 0:
                    file.write(
                        '--------------------------------------------\n')

                ev.dumpf(file)
                i += 1

        finally:
            file.close()

    def load(self, filename):
        file = open(filename, 'r')
        try:
            self.loadf(file)
        finally:
            file.close()

    def loadf(self, file):
        d = {}
        try:
            for line in file:
                if line.lstrip().startswith('#'):
                    continue

                toks = line.split(' = ', 1)
                if len(toks) == 2:
                    k, v = toks[0].strip(), toks[1].strip()
                    if k in ('name', 'region', 'catalog'):
                        d[k] = v
                    if k in (
                            'latitude longitude magnitude depth duration mnn mee mdd mne mnd med strike1 dip1 rake1 strike2 dip2 rake2 duration'
                            .split()):
                        d[k] = float(v)
                    if k == 'time':
                        d[k] = util.ctimegm(v[:19])

                if line.startswith('---'):
                    d['have_separator'] = True
                    break

        except Exception, e:
            raise FileParseError(e)

        if not d:
            raise EOF()

        if 'have_separator' in d and len(d) == 1:
            raise EmptyEvent()

        mt = None
        m6 = [d[x] for x in 'mnn mee mdd mne mnd med'.split() if x in d]
        if len(m6) == 6:
            mt = moment_tensor.MomentTensor(m=moment_tensor.symmat6(*m6))
        else:
            sdr = [d[x] for x in 'strike1 dip1 rake1'.split() if x in d]
            if len(sdr) == 3:
                moment = 1.0
                if 'moment' in d:
                    moment = d['moment']
                elif 'magnitude' in d:
                    moment = moment_tensor.magnitude_to_moment(d['magnitude'])

                mt = moment_tensor.MomentTensor(strike=sdr[0],
                                                dip=sdr[1],
                                                rake=sdr[2],
                                                scalar_moment=moment)

        self.lat = d.get('latitude', 0.0)
        self.lon = d.get('longitude', 0.0)
        self.time = d.get('time', 0.0)
        self.name = d.get('name', '')
        self.depth = d.get('depth', None)
        self.magnitude = d.get('magnitude', None)
        self.duration = d.get('duration', None)
        self.region = d.get('region', None)
        self.catalog = d.get('catalog', None)
        self.moment_tensor = mt