Beispiel #1
0
 def from_ini(cls, config, section, **kwargs):
     """Parse a new tab from a `ConfigParser` section
     """
     # get list of flags and source segmentfile
     kwargs.setdefault(
         'flags',
         [f.strip('\n ') for f in config.get(section, 'flags').split(',')])
     try:
         kwargs.setdefault('segmentfile',
                           config.get(section, 'segmentfile'))
     except NoOptionError:
         pass
     # get padding
     try:
         kwargs.setdefault('padding',
                           [eval(config.get(section, 'padding'))])
     except NoOptionError:
         pass
     # get list of metrics
     kwargs.setdefault('metrics', [
         get_metric(f.strip('\n '))
         for f in config.get(section, 'metrics').split(',')
     ])
     # get labels
     try:
         kwargs.setdefault('labels', [
             f.strip('\n ')
             for f in config.get(section, 'labels').split(',')
         ])
     except NoOptionError:
         pass
     # get ETG params
     try:
         kwargs.setdefault(
             'channel', get_channel(config.get(section, 'event-channel')))
     except NoOptionError:
         pass
     else:
         kwargs.setdefault('etg', config.get(section, 'event-generator'))
         try:
             kwargs.setdefault('table', config.get(section, 'event-table'))
         except NoOptionError:
             pass
     # get flag combine
     if len(kwargs['flags']) > 1 and 'intersection' not in kwargs:
         try:
             combine = config.get(section, 'combine')
         except NoOptionError:
             kwargs['intersection'] = False
         else:
             if combine.lower() == 'intersection':
                 kwargs['intersection'] = True
             elif combine.lower() != 'union':
                 raise ValueError("Cannot parse flag combine operator %r" %
                                  combine)
             else:
                 kwargs['intersection'] = False
     # make tab and return
     new = super(ParentTab, cls).from_ini(config, section, **kwargs)
     return new
Beispiel #2
0
 def __init__(self, name,
              flags=[],
              metrics=[],
              channel=None, etg=None, format=None,
              intersection=False,
              labels=None,
              segmentfile=None,
              minseglength=0,
              padding=(0, 0),
              plotdir=os.curdir, states=list([ALLSTATE]), **kwargs):
     if len(flags) == 0:
         flags = [name]
         if isinstance(name, tuple):
             name = name[0]
     super(FlagTab, self).__init__(
         name, states=states, **kwargs)
     self.flags = list(flags)
     self.segmentfile = segmentfile
     self.minseglength = minseglength
     self.labels = labels or map(str, self.flags)
     self.metrics = metrics
     self.channel = channel and get_channel(channel) or None
     self.etg = etg
     self.etgformat = format
     self.intersection = intersection
     self.padding = format_padding(self.flags, padding)
     if intersection:
         self.metaflag = '&'.join(map(str, self.flags))
     else:
         self.metaflag = '|'.join(map(str, self.flags))
     # make space for the results
     self.results = {}
     # configure default plots
     if not len(self.plots):
         self.init_plots(plotdir=plotdir)
Beispiel #3
0
 def from_ini(cls, config, section, **kwargs):
     """Parse a new tab from a `ConfigParser` section
     """
     # get list of flags and source segmentfile
     kwargs.setdefault(
         'flags', [f.strip('\n ') for f in
                   config.get(section, 'flags').split(',')])
     try:
         kwargs.setdefault('segmentfile', config.get(section, 'segmentfile'))
     except NoOptionError:
         pass
     # get padding
     try:
         kwargs.setdefault(
             'padding', [eval(config.get(section, 'padding'))])
     except NoOptionError:
         pass
     # get list of metrics
     kwargs.setdefault(
         'metrics',
         [get_metric(f.strip('\n ')) for f in
              config.get(section, 'metrics').split(',')])
     # get labels
     try:
         kwargs.setdefault(
             'labels',
             [f.strip('\n ') for f in
                  config.get(section, 'labels').split(',')])
     except NoOptionError:
         pass
     # get ETG params
     try:
         kwargs.setdefault(
             'channel', get_channel(config.get(section, 'event-channel')))
     except NoOptionError:
         pass
     else:
         kwargs.setdefault('etg', config.get(section, 'event-generator'))
         try:
             kwargs.setdefault('format', config.get(section, 'event-format'))
         except NoOptionError:
             pass
     # get flag combine
     if len(kwargs['flags']) > 1 and 'intersection' not in kwargs:
         try:
             combine = config.get(section, 'combine')
         except NoOptionError:
             kwargs['intersection'] = False
         else:
             if combine.lower() == 'intersection':
                 kwargs['intersection'] = True
             elif combine.lower() != 'union':
                 raise ValueError("Cannot parse flag combine operator %r" %
                                  combine)
             else:
                 kwargs['intersection'] = False
     # make tab and return
     new = super(ParentTab, cls).from_ini(config, section, **kwargs)
     return new
Beispiel #4
0
    def init_plots(self, plotdir=os.curdir):
        """Configure the default list of plots for this tab

        This method configures a veto-trigger glitchgram, histograms of
        before/after SNR and frequency/template duration,
        before and after glitchgrams, and a segment plot.

        This method is a mess, and should be re-written in a better way.
        """
        if self.intersection:
            label = 'Intersection'
        else:
            label = 'Union'

        self.layout = [
            1,
        ]
        before = get_channel(str(self.channel))
        for state in self.states:
            if self.channel:
                after = get_channel(
                    veto_tag(before, self.metaflag, mode='after'))
                vetoed = get_channel(
                    veto_tag(before, self.metaflag, mode='vetoed'))
                # -- configure trigger plots
                params = etg.get_etg_parameters(self.etg)
                glitchgramargs = {
                    'etg': self.etg,
                    'x': 'time',
                    'y': params['frequency'],
                    'logy': params.get('frequency-log', True),
                    'ylabel': get_column_label(params['frequency']),
                    'edgecolor': 'none',
                    'legend-scatterpoints': 1,
                    'legend-borderaxespad': 0,
                    'legend-bbox_to_anchor': (1.01, 1),
                    'legend-loc': 'upper left',
                }
                # plot before/after glitchgram
                self.plots.append(
                    get_plot('triggers')([after, vetoed],
                                         self.start,
                                         self.end,
                                         state=state,
                                         title='Impact of %s (%s)' %
                                         (label_to_latex(self.name), self.etg),
                                         outdir=plotdir,
                                         labels=['_', 'Vetoed'],
                                         colors=['lightblue', 'red'],
                                         **glitchgramargs))

                # plot histograms
                statistics = ['snr']
                if params['det'] != params['snr']:
                    statistics.append('det')
                self.layout.append(len(statistics) + 1)
                for column in statistics + ['frequency']:
                    self.plots.append(
                        get_plot('trigger-histogram')(
                            [before, after],
                            self.start,
                            self.end,
                            state=state,
                            column=params[column],
                            etg=self.etg,
                            outdir=plotdir,
                            title='Impact of %s (%s)' %
                            (label_to_latex(self.name), self.etg),
                            labels=['Before', 'After'],
                            xlabel=params.get('%s-label' % column,
                                              get_column_label(
                                                  params[column])),
                            color=['red', (0.2, 0.8, 0.2)],
                            logx=params.get('%s-log' % column, True),
                            logy=True,
                            histtype='stepfilled',
                            alpha=0.6,
                            weights=1 / float(abs(self.span)),
                            bins=100,
                            ybound=1 / float(abs(self.span)) * 0.5,
                            **{
                                'legend-borderaxespad': 0,
                                'legend-bbox_to_anchor': (1.01, 1),
                                'legend-loc': 'upper left'
                            }))

                # plot triggers before and after
                for stat in statistics:
                    column = params[stat]
                    glitchgramargs.update({
                        'color':
                        column,
                        'clim':
                        params.get('%s-limits' % stat, [3, 100]),
                        'logcolor':
                        params.get('%s-log' % stat, True),
                        'colorlabel':
                        params.get('%s-label' % stat,
                                   get_column_label(column)),
                    })
                    self.plots.append(
                        get_plot('triggers')([before],
                                             self.start,
                                             self.end,
                                             state=state,
                                             outdir=plotdir,
                                             **glitchgramargs))
                    self.plots.append(
                        get_plot('triggers')(
                            [after],
                            self.start,
                            self.end,
                            state=state,
                            title='After %s (%s)' %
                            (label_to_latex(self.name), self.etg),
                            outdir=plotdir,
                            **glitchgramargs))
                    self.layout.append(2)

            # -- configure segment plot
            segargs = {
                'state': state,
                'known': {
                    'alpha': 0.1,
                    'facecolor': 'lightgray'
                },
                'color': 'red',
            }
            if len(self.flags) == 1:
                sp = get_plot('segments')(self.flags,
                                          self.start,
                                          self.end,
                                          outdir=plotdir,
                                          labels=self.labels,
                                          **segargs)
            else:
                sp = get_plot('segments')(
                    [self.metaflag] + self.flags,
                    self.start,
                    self.end,
                    labels=([self.intersection and 'Intersection' or 'Union'] +
                            self.labels),
                    outdir=plotdir,
                    **segargs)
            self.plots.append(sp)
            self.layout.append(1)
Beispiel #5
0
    def init_plots(self, plotdir=os.curdir):
        """Configure the default list of plots for this tab

        This method configures a veto-trigger glitchgram, histograms of
        before/after SNR and frequency/template duration,
        before and after glitchgrams, and a segment plot.

        This method is a mess, and should be re-written in a better way.
        """
        if self.intersection:
            label = 'Intersection'
        else:
            label = 'Union'

        etgstr = self.etg.replace('_', r'\\_')

        self.set_layout([1,])
        before = get_channel(str(self.channel))
        for state in self.states:
            if self.channel:
                after = get_channel(veto_tag(before, self.metaflag,
                                             mode='after'))
                vetoed = get_channel(veto_tag(before, self.metaflag,
                                              mode='vetoed'))
                # -- configure trigger plots
                params = etg.get_etg_parameters(self.etg, IFO=before.ifo)
                glitchgramargs = {
                    'etg': self.etg,
                    'x': params['time'],
                    'y': params['frequency'],
                    'logy': params.get('frequency-log', True),
                    'ylabel': params.get('frequency-label',
                                         get_column_label(params['frequency'])),
                    'edgecolor': 'none',
                    'legend-scatterpoints': 1,
                    'legend-borderaxespad': 0,
                    'legend-bbox_to_anchor': (1.01, 1),
                    'legend-loc': 'upper left',
                }
                # plot before/after glitchgram
                self.plots.append(get_plot('triggers')(
                    [after, vetoed], self.start, self.end, state=state,
                    title='Impact of %s (%s)' % (
                        label_to_latex(self.name), etgstr),
                    outdir=plotdir, labels=['_', 'Vetoed'],
                    colors=['lightblue', 'red'], **glitchgramargs))

                # plot histograms
                statistics = ['snr']
                if params['det'] != params['snr']:
                    statistics.append('det')
                self.layout.append(len(statistics) + 1)
                for column in statistics + ['frequency']:
                    self.plots.append(get_plot('trigger-histogram')(
                        [before, after], self.start, self.end, state=state,
                        column=params[column], etg=self.etg, outdir=plotdir,
                        title='Impact of %s (%s)' % (
                            label_to_latex(self.name), etgstr),
                        labels=['Before', 'After'],
                        xlabel=params.get('%s-label' % column,
                                          get_column_label(params[column])),
                        color=['red', (0.2, 0.8, 0.2)],
                        logx=params.get('%s-log' % column, True),
                        logy=True,
                        histtype='stepfilled', alpha=0.6,
                        weights=1/float(abs(self.span)), bins=100,
                        ybound=1/float(abs(self.span)) * 0.5, **{
                            'legend-borderaxespad': 0,
                            'legend-bbox_to_anchor': (1.01, 1),
                            'legend-loc': 'upper left'}
                    ))

                # plot triggers before and after
                for stat in statistics:
                    column = params[stat]
                    glitchgramargs.update({
                        'color': column,
                        'clim': params.get('%s-limits' % stat, [3, 100]),
                        'logcolor': params.get('%s-log' % stat, True),
                        'colorlabel': params.get('%s-label' % stat,
                                                 get_column_label(column)),
                    })
                    self.plots.append(get_plot('triggers')(
                        [before], self.start, self.end, state=state,
                        outdir=plotdir, **glitchgramargs))
                    self.plots.append(get_plot('triggers')(
                        [after], self.start, self.end, state=state,
                        title='After %s (%s)' % (
                            label_to_latex(self.name), self.etg),
                        outdir=plotdir, **glitchgramargs))
                    self.layout.append(2)

            # -- configure segment plot
            segargs = {
                'state': state,
                'known': {'alpha': 0.1, 'facecolor': 'lightgray'},
                'color': 'red',
            }
            if len(self.flags) == 1:
                sp = get_plot('segments')(self.flags, self.start, self.end,
                                          outdir=plotdir, labels=self.labels,
                                          **segargs)
            else:
                sp = get_plot('segments')(
                    [self.metaflag] + self.flags, self.start, self.end,
                    labels=([self.intersection and 'Intersection' or 'Union'] +
                            self.labels), outdir=plotdir, **segargs)
            self.plots.append(sp)
            self.layout.append(1)