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
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)
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
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)
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)