diff --git a/MANIFEST.in b/MANIFEST.in index 6154f1db0f6bdba5fc6a689dfe5e99f3ef4513a2..7e877d8ac59d89a3ea540ee0bc0dbc89dbcdbb73 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ include LICENSE README.rst buildout.cfg develop.cfg version.txt requirements.txt test-requirements.txt recursive-include doc *.py *.rst -recursive-include bob/bio/base/test/data *.lst *.hdf5 *-dev *.pos +recursive-include bob/bio/base/test/data *.* *-dev diff --git a/bob/bio/base/score/__init__.py b/bob/bio/base/score/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..df3dd386139b9bf99822c93b8424dcc76fcff968 --- /dev/null +++ b/bob/bio/base/score/__init__.py @@ -0,0 +1,6 @@ +from .load import (open_file, split, cmc, split_four_column, four_column, + split_five_column, five_column, scores, load_score, + dump_score, cmc_four_column, cmc_five_column + ) +from .openbr import (write_matrix, write_score_file) + diff --git a/bob/bio/base/score/load.py b/bob/bio/base/score/load.py new file mode 100644 index 0000000000000000000000000000000000000000..7a5d76cacba631b1ab09f8049773e43f9910cb7f --- /dev/null +++ b/bob/bio/base/score/load.py @@ -0,0 +1,553 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Mon 23 May 2011 16:23:05 CEST + +"""A set of utilities to load score files with different formats. +""" + +import numpy +import csv +import tarfile +import os +import sys + +import logging +logger = logging.getLogger('bob.bio.base') + + +def open_file(filename, mode='rt'): + """Opens the given score file for reading. + + Score files might be raw text files, or a tar-file including a single score + file inside. + + + Parameters: + + filename (:py:class:`str`, ``file-like``): The name of the score file to + open, or a file-like object open for reading. If a file name is given, + the according file might be a raw text file or a (compressed) tar file + containing a raw text file. + + + Returns: + + + ``file-like``: A read-only file-like object as it would be returned by + :py:func:`open`. + + """ + + if not isinstance(filename, str) and hasattr(filename, 'read'): + # It seems that this is an open file + return filename + + if not os.path.isfile(filename): + raise IOError("Score file '%s' does not exist." % filename) + if not tarfile.is_tarfile(filename): + return open(filename, mode) + + # open the tar file for reading + tar = tarfile.open(filename, 'r') + # get the first file in the tar file + tar_info = tar.next() + while tar_info is not None and not tar_info.isfile(): + tar_info = tar.next() + # check that one file was found in the archive + if tar_info is None: + raise IOError( + "The given file is a .tar file, but it does not contain any file.") + + # open the file for reading + return tar.extractfile(tar_info) + + +def four_column(filename): + """Loads a score set from a single file and yield its lines + + Loads a score set from a single file and yield its lines (to avoid loading + the score file at once into memory). This function verifies that all fields + are correctly placed and contain valid fields. The score file must contain + the following information in each line: + + .. code-block:: text + + claimed_id real_id test_label score + + + Parameters: + + filename (:py:class:`str`, ``file-like``): The file object that will be + opened with :py:func:`open_file` containing the scores. + + + Yields: + + str: The claimed identity -- the client name of the model that was used in + the comparison + + str: The real identity -- the client name of the probe that was used in the + comparison + + str: A label of the probe -- usually the probe file name, or the probe id + + float: The result of the comparison of the model and the probe + + """ + return _iterate_score_file(filename) + + +def split_four_column(filename): + """Loads a score set from a single file and splits the scores + + Loads a score set from a single file and splits the scores between negatives + and positives. The score file has to respect the 4 column format as defined + in the method :py:func:`four_column`. + + This method avoids loading and allocating memory for the strings present in + the file. We only keep the scores. + + + Parameters: + + filename (:py:class:`str`, ``file-like``): The file object that will be + opened with :py:func:`open_file` containing the scores. + + + Returns: + + array: negatives, 1D float array containing the list of scores, for which + the ``claimed_id`` and the ``real_id`` are different + (see :py:func:`four_column`) + + array: positives, 1D float array containing the list of scores, for which + the ``claimed_id`` and the ``real_id`` are identical + (see :py:func:`four_column`) + + """ + + score_lines = four_column(filename) + return _split_scores(score_lines, 1) + + +def cmc_four_column(filename): + """Loads scores to compute CMC curves from a file in four column format. + + The four column file needs to be in the same format as described in + :py:func:`four_column`, and the ``test_label`` (column 3) has to contain the + test/probe file name or a probe id. + + This function returns a list of tuples. For each probe file, the tuple + consists of a list of negative scores and a list of positive scores. + Usually, the list of positive scores should contain only one element, but + more are allowed. The result of this function can directly be passed to, + e.g., the :py:func:`bob.measure.cmc` function. + + + Parameters: + + filename (:py:class:`str`, ``file-like``): The file object that will be + opened with :py:func:`open_file` containing the scores. + + + Returns: + + :any:`list`: A list of tuples, where each tuple contains the + ``negative`` and ``positive`` scores for one probe of the database. Both + ``negatives`` and ``positives`` can be either an 1D + :py:class:`numpy.ndarray` of type ``float``, or ``None``. + + """ + + score_lines = four_column(filename) + return _split_cmc_scores(score_lines, 1) + + +def five_column(filename): + """Loads a score set from a single file and yield its lines + + Loads a score set from a single file and yield its lines (to avoid loading + the score file at once into memory). This function verifies that all fields + are correctly placed and contain valid fields. The score file must contain + the following information in each line: + + .. code-block:: text + + claimed_id model_label real_id test_label score + + + Parameters: + + filename (:py:class:`str`, ``file-like``): The file object that will be + opened with :py:func:`open_file` containing the scores. + + + Yields: + + str: The claimed identity -- the client name of the model that was used in + the comparison + + str: A label for the model -- usually the model file name, or the model id + + str: The real identity -- the client name of the probe that was used in the + comparison + + str: A label of the probe -- usually the probe file name, or the probe id + + float: The result of the comparison of the model and the probe + + """ + + return _iterate_score_file(filename) + + +def split_five_column(filename): + """Loads a score set from a single file and splits the scores + + Loads a score set from a single file in five column format and splits the + scores between negatives and positives. The score file has to respect the 5 + column format as defined in the method :py:func:`five_column`. + + This method avoids loading and allocating memory for the strings present in + the file. We only keep the scores. + + + Parameters: + + filename (:py:class:`str`, ``file-like``): The file object that will be + opened with :py:func:`open_file` containing the scores. + + + Returns: + + array: negatives, 1D float array containing the list of scores, for which + the ``claimed_id`` and the ``real_id`` are different + (see :py:func:`four_column`) + + array: positives, 1D float array containing the list of scores, for which + the ``claimed_id`` and the ``real_id`` are identical + (see :py:func:`four_column`) + + """ + + score_lines = four_column(filename) + return _split_scores(score_lines, 2) + + +def cmc_five_column(filename): + """Loads scores to compute CMC curves from a file in five column format. + + The five column file needs to be in the same format as described in + :py:func:`five_column`, and the ``test_label`` (column 4) has to contain the + test/probe file name or a probe id. + + This function returns a list of tuples. For each probe file, the tuple + consists of a list of negative scores and a list of positive scores. + Usually, the list of positive scores should contain only one element, but + more are allowed. The result of this function can directly be passed to, + e.g., the :py:func:`bob.measure.cmc` function. + + + Parameters: + + filename (:py:class:`str`, ``file-like``): The file object that will be + opened with :py:func:`open_file` containing the scores. + + + Returns: + + :any:`list`: A list of tuples, where each tuple contains the + ``negative`` and ``positive`` scores for one probe of the database. + + """ + score_lines = four_column(filename) + return _split_cmc_scores(score_lines, 2) + + +def scores(filename, ncolumns=None): + """scores(filename, ncolumns=None) -> tuple + + Loads the scores from the given score file and yield its lines. + Depending on the score file format, four or five elements are yielded, see + :py:func:`bob.bio.base.score.load.four_column` and + :py:func:`bob.bio.base.score.load.five_column` for details. + + Parameters: + + filename: :py:class:`str`, ``file-like``: + The file object that will be opened with :py:func:`open_file` containing the scores. + + ncolumns: any + ignored + + Yields: + + tuple: + see :py:func:`bob.bio.base.score.load.four_column` or + :py:func:`bob.bio.base.score.load.five_column` + """ + return _iterate_score_file(filename) + + +def split(filename, ncolumns=None): + """split(filename, ncolumns=None) -> negatives, positives + + Loads the scores from the given score file and splits them into positives and negatives. + + Depending on the score file format, it calls see :py:func:`split_four_column` + and :py:func:`split_five_column` for details. + + Parameters: + + filename: :py:class:`str`, ``file-like``: + The file object that will be opened with :py:func:`open_file` containing the scores. + + ncolumns: int or ``None`` + If specified to be ``4`` or ``5``, the score file will be assumed to be in the given format. + If not specified, the score file format will be estimated automatically + + Returns: + + negatives: 1D :py:class:`numpy.ndarray` of type float + This array contains the list of scores, for which the ``claimed_id`` and the ``real_id`` are different (see :py:func:`four_column`) + + positives: 1D :py:class:`numpy.ndarray` of type float + This array contains the list of scores, for which the ``claimed_id`` and the ``real_id`` are identical (see :py:func:`four_column`) + + """ + ncolumns = _estimate_score_file_format(filename, ncolumns) + if ncolumns == 4: + return split_four_column(filename) + else: + assert ncolumns == 5 + return split_five_column(filename) + + +def cmc(filename, ncolumns=None): + """cmc(filename, ncolumns=None) -> list + + Loads scores to compute CMC curves. + + Depending on the score file format, it calls see + :py:func:`bob.bio.base.score.load.cmc_four_column` and + `:py:func:`bob.bio.base.score.load.cmc_five_column` for details. + + Parameters: + + filename (:py:class:`str` or ``file-like``): The file object that will be + opened with :py:func:`open_file` containing the scores. + + ncolumns: (:py:class:`int`, Optional): If specified to be ``4`` or ``5``, + the score file will be assumed to be in the given format. If not + specified, the score file format will be estimated automatically + + Returns: + + :any:`list`: [(neg,pos)] A list of tuples, where each tuple contains the + ``negative`` and ``positive`` scores for one probe of the database. + + """ + ncolumns = _estimate_score_file_format(filename, ncolumns) + if ncolumns == 4: + return cmc_four_column(filename) + else: + assert ncolumns == 5 + return cmc_five_column(filename) + + +def load_score(filename, ncolumns=None, minimal=False, **kwargs): + """Load scores using numpy.loadtxt and return the data as a numpy array. + + Parameters: + + filename (:py:class:`str`, ``file-like``): The file object that will be + opened with :py:func:`open_file` containing the scores. + + ncolumns (:py:class:`int`, optional): 4, 5 or None (the default), + specifying the number of columns in the score file. If None is provided, + the number of columns will be guessed. + + minimal (:py:class:`bool`, optional): If True, only loads ``claimed_id``, ``real_id``, + and ``scores``. + + **kwargs: Keyword arguments passed to :py:func:`numpy.genfromtxt` + + + Returns: + + array: An array which contains not only the actual scores but also the + ``claimed_id``, ``real_id``, ``test_label`` and ``['model_label']`` + + """ + + def convertfunc(x): + return x + + ncolumns = _estimate_score_file_format(filename, ncolumns) + + usecols = kwargs.pop('usecols', None) + if ncolumns == 4: + names = ('claimed_id', 'real_id', 'test_label', 'score') + converters = { + 0: convertfunc, + 1: convertfunc, + 2: convertfunc, + 3: float} + if minimal: + usecols = (0, 1, 3) + + elif ncolumns == 5: + names = ('claimed_id', 'model_label', 'real_id', 'test_label', 'score') + converters = { + 0: convertfunc, + 1: convertfunc, + 2: convertfunc, + 3: convertfunc, + 4: float} + if minimal: + usecols = (0, 2, 4) + else: + raise ValueError("ncolumns of 4 and 5 are supported only.") + + score_lines = numpy.genfromtxt( + open_file(filename, mode='rb'), dtype=None, names=names, + converters=converters, invalid_raise=True, usecols=usecols, **kwargs) + new_dtype = [] + for name in score_lines.dtype.names[:-1]: + new_dtype.append((name, str(score_lines.dtype[name]).replace('S', 'U'))) + new_dtype.append(('score', float)) + score_lines = numpy.array(score_lines, new_dtype) + return score_lines + + +def get_negatives_positives(score_lines): + """Take the output of load_score and return negatives and positives. This + function aims to replace split_four_column and split_five_column but takes a + different input. It's up to you to use which one. + """ + + pos_mask = score_lines['claimed_id'] == score_lines['real_id'] + positives = score_lines['score'][pos_mask] + negatives = score_lines['score'][numpy.logical_not(pos_mask)] + return (negatives, positives) + + +def get_negatives_positives_from_file(filename, **kwargs): + """Loads the scores first efficiently and then calls + get_negatives_positives""" + score_lines = load_score(filename, minimal=True, **kwargs) + return get_negatives_positives(score_lines) + + +def get_negatives_positives_all(score_lines_list): + """Take a list of outputs of load_score and return stacked negatives and + positives. + """ + + negatives, positives = [], [] + for score_lines in score_lines_list: + neg_pos = get_negatives_positives(score_lines) + negatives.append(neg_pos[0]) + positives.append(neg_pos[1]) + negatives = numpy.vstack(negatives).T + positives = numpy.vstack(positives).T + return (negatives, positives) + + +def get_all_scores(score_lines_list): + """Take a list of outputs of load_score and return stacked scores""" + + return numpy.vstack([score_lines['score'] + for score_lines in score_lines_list]).T + + +def dump_score(filename, score_lines): + """Dump scores that were loaded using :py:func:`load_score` + The number of columns is automatically detected. + """ + + if len(score_lines.dtype) == 5: + fmt = '%s %s %s %s %.9f' + elif len(score_lines.dtype) == 4: + fmt = '%s %s %s %.9f' + else: + raise ValueError("Only scores with 4 and 5 columns are supported.") + numpy.savetxt(filename, score_lines, fmt=fmt) + + +def _estimate_score_file_format(filename, ncolumns=None): + """Estimates the score file format from the given score file. + If ``ncolumns`` is in ``(4,5)``, then ``ncolumns`` is returned instead. + """ + if ncolumns in (4, 5): + return ncolumns + + f = open_file(filename, 'rb') + try: + line = f.readline() + ncolumns = len(line.split()) + except Exception: + logger.warn('Could not guess the number of columns in file: {}. ' + 'Assuming 4 column format.'.format(filename)) + ncolumns = 4 + finally: + f.close() + return ncolumns + + +def _iterate_score_file(filename): + """Opens the score file for reading and yields the score file line by line in a tuple/list. + + The last element of the line (which is the score) will be transformed to float, the other elements will be str + """ + opened = open_file(filename, 'rb') + if sys.version_info.major > 2: + import io + if not isinstance(opened, io.TextIOWrapper): + opened = io.TextIOWrapper(opened, newline="") + + reader = csv.reader(opened, delimiter=' ') + for splits in reader: + splits[-1] = float(splits[-1]) + yield splits + + +def _split_scores(score_lines, real_id_index, claimed_id_index=0, score_index=-1): + """Take the output of :py:func:`four_column` or :py:func:`five_column` and return negatives and positives. + """ + positives, negatives = [], [] + for line in score_lines: + which = positives if line[claimed_id_index] == line[ + real_id_index] else negatives + which.append(line[score_index]) + + return (numpy.array(negatives), numpy.array(positives)) + + +def _split_cmc_scores(score_lines, real_id_index, probe_name_index=None, claimed_id_index=0, score_index=-1): + """Takes the output of :py:func:`four_column` or :py:func:`five_column` and return cmc scores. + """ + if probe_name_index is None: + probe_name_index = real_id_index + 1 + # extract positives and negatives + pos_dict = {} + neg_dict = {} + # read four column list + for line in score_lines: + which = pos_dict if line[claimed_id_index] == line[ + real_id_index] else neg_dict + probe_name = line[probe_name_index] + # append score + if probe_name not in which: + which[probe_name] = [] + which[probe_name].append(line[score_index]) + + # convert to lists of tuples of ndarrays (or None) + probe_names = sorted(set(neg_dict.keys()).union(set(pos_dict.keys()))) + # get all scores in the desired format + return [( + numpy.array(neg_dict[probe_name], + numpy.float64) if probe_name in neg_dict else None, + numpy.array(pos_dict[probe_name], + numpy.float64) if probe_name in pos_dict else None + ) for probe_name in probe_names] diff --git a/bob/bio/base/score/openbr.py b/bob/bio/base/score/openbr.py new file mode 100644 index 0000000000000000000000000000000000000000..51010f7df69e4e2f34782508aa258f46db01d68d --- /dev/null +++ b/bob/bio/base/score/openbr.py @@ -0,0 +1,368 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : + + +"""This file includes functionality to convert between Bob's four column or + five column score files and the Matrix files used in OpenBR.""" + + +import numpy +import sys +import logging +logger = logging.getLogger("bob.measure") + +from .load import open_file, four_column, five_column + + +def write_matrix( + score_file, + matrix_file, + mask_file, + model_names=None, + probe_names=None, + score_file_format='4column', + gallery_file_name='unknown-gallery.lst', + probe_file_name='unknown-probe.lst', + search=None): + """Writes the OpenBR matrix and mask files (version 2), given a score file. + + If gallery and probe names are provided, the matrices in both files will be + sorted by gallery and probe names. Otherwise, the order will be the same as + given in the score file. + + If ``search`` is given (as an integer), the resulting matrix files will be in + the *search* format, keeping the given number of gallery scores with the + highest values for each probe. + + .. warning:: + + When provided with a 4-column score file, this function will work only, if + there is only a single model id for each client. + + Parameters: + + score_file (str): The 4 or 5 column style score file written by bob. + + matrix_file (str): The OpenBR matrix file that should be written. + Usually, the file name extension is ``.mtx`` + + mask_file (str): The OpenBR mask file that should be written. + The mask file defines, which values are positives, negatives or to be + ignored. Usually, the file name extension is ``.mask`` + + model_names (:py:class:`str`, optional): If given, the matrix will be + written in the same order as the given model names. The model names must + be identical with the second column in the 5-column ``score_file``. + + .. note:: + + If the score file is in four column format, the model_names must be + the client ids stored in the first column. In this case, there might + be only a single model per client + + Only the scores of the given models will be considered. + + probe_names (:any:`list`, optional): A list of strings. If given, + the matrix will be written in the same order as the given probe names + (the ``path`` of the probe). The probe names are identical to the third + column of the 4-column (or the fourth column of the 5-column) + ``score_file``. Only the scores of the given probe names will be + considered in this case. + + score_file_format (:py:class:`str`, optional): One of ``('4column', + '5column')``. The format, in which the ``score_file`` is; defaults to + ``'4column'`` + + gallery_file_name (:py:class:`str`, optional): The name of the gallery file + that will be written in the header of the OpenBR files. + + probe_file_name (:py:class:`str`, optional): The name of the probe file that + will be written in the header of the OpenBR files. + + search (:py:class:`int`, optional): If given, the scores will be sorted per + probe, keeping the specified number of highest scores. If the given + number is higher than the models, ``NaN`` values will be added, and the + mask will contain ``0x00`` values. + + """ + + def _write_matrix(filename, matrix): + # Helper function to write a matrix file as required by OpenBR + with open(filename, 'wb') as f: + # write the first four lines + header = "S2\n%s\n%s\nM%s %d %d " % ( + gallery_file_name, probe_file_name, 'B' if matrix.dtype == numpy.uint8 else 'F', matrix.shape[0], matrix.shape[1]) + footer = "\n" + if sys.version_info[0] > 2: + header, footer = header.encode('utf-8'), footer.encode('utf-8') + f.write(header) + # write magic number + numpy.array(0x12345678, numpy.int32).tofile(f) + f.write(footer) + # write the matrix + matrix.tofile(f) + + # define read functions, and which information should be read + read_function = {'4column': four_column, + '5column': five_column}[score_file_format] + offset = {'4column': 0, '5column': 1}[score_file_format] + + # first, read the score file and estimate model and probe names, if not given + if model_names is None or probe_names is None: + model_names, probe_names = [], [] + model_set, probe_set = set(), set() + + # read the score file + for line in read_function(score_file): + model, probe = line[offset], line[2 + offset] + if model not in model_set: + model_names.append(model) + model_set.add(model) + if probe not in probe_set: + probe_names.append(probe) + probe_set.add(probe) + + if search is None: + # create a shortcut to get indices for client and probe subset (to + # increase speed) + model_dict, probe_dict = {}, {} + for i, m in enumerate(model_names): + model_dict[m] = i + for i, p in enumerate(probe_names): + probe_dict[p] = i + + # create the matrices in the desired size + matrix = numpy.ndarray((len(probe_names), len(model_names)), numpy.float32) + matrix[:] = numpy.nan + mask = numpy.zeros(matrix.shape, numpy.uint8) + + # now, iterate through the score file and fill in the matrix + for line in read_function(score_file): + client, model, id, probe, score = line[0], line[offset], line[ + 1 + offset], line[2 + offset], line[3 + offset] + + assert model in model_dict, "model " + model + " unknown" + assert probe in probe_dict, "probe " + probe + " unknown" + + model_index = model_dict[model] + probe_index = probe_dict[probe] + + # check, if we have already written something into that matrix element + if mask[probe_index, model_index]: + logger.warn("Overwriting existing matrix '%f' element of client '%s' and probe '%s' with '%f'", matrix[ + probe_index, model_index], client, probe, score) + + matrix[probe_index, model_index] = score + mask[probe_index, model_index] = 0xff if client == id else 0x7f + + else: + # get the correct search parameter, if negative + if search < 0: + search = len(model_names) + + # create the matrices in the desired size + matrix = numpy.ndarray((len(probe_names), search), numpy.float32) + matrix[:] = numpy.nan + mask = numpy.zeros(matrix.shape, numpy.uint8) + + # get the scores, sorted by probe + scores = {} + for line in read_function(score_file): + client, model, id, probe, score = line[0], line[offset], line[ + 1 + offset], line[2 + offset], line[3 + offset] + + if probe not in scores: + scores[probe] = [] + scores[probe].append((score, 0xff if client == id else 0x7f)) + + # go ahead and sort the scores per probe + sorted_scores = {} + for k, v in scores.items(): + sorted_scores[k] = sorted(v, key=lambda x: x[0], reverse=True) + + # now, write matrix + for p, probe in enumerate(probe_names): + if probe in scores: + for m in range(min(search, len(sorted_scores[probe]))): + matrix[p, m], mask[p, m] = sorted_scores[probe][m] + + # OK, now finally write the file in the desired format + _write_matrix(mask_file, mask) + _write_matrix(matrix_file, matrix) + + +def write_score_file( + matrix_file, + mask_file, + score_file, + models_ids=None, + probes_ids=None, + model_names=None, + probe_names=None, + score_file_format='4column', + replace_nan=None +): + """Writes the Bob score file in the desired format from OpenBR files. + + Writes a Bob score file in the desired format (four or five column), given + the OpenBR matrix and mask files. + + In principle, the score file can be written based on the matrix and mask + files, and the format suffice the requirements to compute CMC curves. + However, the contents of the score files can be adapted. If given, the + ``models_ids`` and ``probes_ids`` define the **client ids** of model and + probe, and they have to be in the same order as used to compute the OpenBR + matrix. The ``model_names`` and ``probe_names`` define the **paths** of + model and probe, and they should be in the same order as the ids. + + In rare cases, the OpenBR matrix contains NaN values, which Bob's score files + cannot handle. You can use the ``replace_nan`` parameter to decide, what to + do with these values. By default (``None``), these values are ignored, i.e., + not written into the score file. This is, what OpenBR is doing as well. + However, you can also set ``replace_nan`` to any value, which will be written + instead of the NaN values. + + + Parameters: + + matrix_file (str): The OpenBR matrix file that should be read. Usually, the + file name extension is ``.mtx`` + + mask_file (str): The OpenBR mask file that should be read. Usually, the + file name extension is ``.mask`` + + score_file (str): Path to the 4 or 5 column style score file that should be + written. + + models_ids (:any:`list`, optional): A list of strings with the client + ids of the models that will be written in the first column of the score + file. If given, the size must be identical to the number of models + (gallery templates) in the OpenBR files. If not given, client ids of the + model will be identical to the **gallery index** in the matrix file. + + probes_ids (:any:`list`, optional): A list of strings with the client + ids of the probes that will be written in the second/third column of the + four/five column score file. If given, the size must be identical to the + number of probe templates in the OpenBR files. It will be checked that + the OpenBR mask fits to the model/probe client ids. If not given, the + probe ids will be estimated automatically, i.e., to fit the OpenBR + matrix. + + model_names (:any:`list`, optional): A list of strings with the model + path written in the second column of the five column score file. If not + given, the model index in the OpenBR file will be used. + + .. note:: + + This entry is ignored in the four column score file format. + + probe_names (:any:`list`, optional): A list of probe path to be + written in the third/fourth column in the four/five column score file. If + given, the size must be identical to the number of probe templates in the + OpenBR files. If not given, the probe index in the OpenBR file will be + used. + + score_file_format (:py:class:`str`, optional): One of ``('4column', + '5column')``. The format, in which the ``score_file`` is; defaults to + ``'4column'`` + + replace_nan (:py:class:`float`, optional): If NaN values are encountered in + the OpenBR matrix (which are not ignored due to the mask being non-NULL), + this value will be written instead. If ``None``, the values will not be + written in the score file at all. + + """ + + def _read_matrix(filename): + py3 = sys.version_info[0] >= 3 + # Helper function to read a matrix file as written by OpenBR + with open(filename, 'rb') as f: + # get version + header = f.readline() + if py3: + header = header.decode("utf-8") + assert header[:2] == "S2" + # skip gallery and probe files + f.readline() + f.readline() + # read size and type of matrix + size = f.readline() + if py3: + size = size.decode("utf-8") + splits = size.rstrip().split() + # TODO: check the endianess of the magic number stored in split[3] + assert splits[0][0] == 'M' + w, h = int(splits[1]), int(splits[2]) + # read matrix data + data = numpy.fromfile( + f, dtype={'B': numpy.uint8, 'F': numpy.float32}[splits[0][1]]) + assert data.shape[0] == w * h + data.shape = (w, h) + return data + + # check parameters + if score_file_format not in ("4column", "5column"): + raise ValueError( + "The given score file format %s is not known; choose one of ('4column', '5column')" % score_file_format) + # get type of score file + four_col = score_file_format == "4column" + + # read the two matrices + scores = _read_matrix(matrix_file) + mask = _read_matrix(mask_file) + + # generate the id lists, if not given + if models_ids is None: + models_ids = [str(g + 1) for g in range(mask.shape[1])] + assert len(models_ids) == mask.shape[1] + + if probes_ids is None: + probes_ids = [] + # iterate over all probes + for p in range(mask.shape[0]): + # get indices, where model and probe id should be identical + equal_indices = numpy.where(mask[p] == 0xff) + if len(equal_indices): + # model id found, use the first one + probes_ids.append(models_ids[equal_indices[0][0]]) + else: + # no model found; add non-existing id + probes_ids.append("unknown") + else: + assert len(probes_ids) == mask.shape[0] + # check that the probes client ids are in the correct order + for p in range(mask.shape[0]): + for g in range(mask.shape[1]): + if mask[p, g] == 0x7f: + if models_ids[g] == probes_ids[p]: + raise ValueError("The probe id %s with index %d should not be identical to model id %s with index %d" % ( + probes_ids[p], p, models_ids[g], g)) + elif mask[p, g] == 0xff: + if models_ids[g] != probes_ids[p]: + raise ValueError("The probe id %s with index %d should be identical to model id %s with index %d" % ( + probes_ids[p], p, models_ids[g], g)) + + # generate model and probe names, if not given + if not four_col and model_names is None: + model_names = [str(g + 1) for g in range(mask.shape[1])] + if probe_names is None: + probe_names = [str(p + 1) for p in range(mask.shape[0])] + + # iterate through the files and write scores + with open(score_file, 'w') as f: + for g in range(mask.shape[1]): + for p in range(mask.shape[0]): + if mask[p, g]: + score = scores[p, g] + # handle NaN values + if numpy.isnan(score): + if replace_nan is None: + continue + score = replace_nan + # write score file + if four_col: + f.write("%s %s %s %3.8f\n" % + (models_ids[g], probes_ids[p], probe_names[p], score)) + else: + f.write("%s %s %s %s %3.8f\n" % (models_ids[g], model_names[ + g], probes_ids[p], probe_names[p], score)) diff --git a/bob/bio/base/script/collect_results.py b/bob/bio/base/script/collect_results.py index 6e1cc0681258b967339dc466bff96bc7470185b9..df08375cf7202a6086df0803f353a2abfd9f6dd9 100644 --- a/bob/bio/base/script/collect_results.py +++ b/bob/bio/base/script/collect_results.py @@ -29,8 +29,9 @@ import sys, os, glob import argparse import numpy -import bob.measure import bob.core +from .. import score + logger = bob.core.log.setup("bob.bio.base") def command_line_arguments(command_line_parameters): @@ -80,9 +81,9 @@ class Result: def _calculate(self, dev_file, eval_file = None): """Calculates the EER and HTER or FRR based on the threshold criterion.""" if self.m_args.criterion in ("RR", "DIR"): - scores_dev = bob.measure.load.cmc(dev_file) + scores_dev = score.cmc(dev_file) if eval_file is not None: - scores_eval = bob.measure.load.cmc(eval_file) + scores_eval = score.cmc(eval_file) if self.m_args.criterion == "DIR": # get negatives without positives @@ -110,7 +111,7 @@ class Result: else: - dev_neg, dev_pos = bob.measure.load.split(dev_file) + dev_neg, dev_pos = score.split(dev_file) # switch which threshold function to use if self.m_args.criterion == 'EER': @@ -127,7 +128,7 @@ class Result: dev_hter = (dev_far + dev_frr)/2.0 if eval_file: - eval_neg, eval_pos = bob.measure.load.split(eval_file) + eval_neg, eval_pos = score.split(eval_file) eval_far, eval_frr = bob.measure.farfrr(eval_neg, eval_pos, threshold) eval_hter = (eval_far + eval_frr)/2.0 else: diff --git a/bob/bio/base/script/evaluate.py b/bob/bio/base/script/evaluate.py index 21c27ee876fac1eb0c6f9748b79993dd73f10c71..8d285f70953599bb36cb1eed02e8cee5a046d6c7 100644 --- a/bob/bio/base/script/evaluate.py +++ b/bob/bio/base/script/evaluate.py @@ -1,465 +1,467 @@ -#!/usr/bin/env python -# vim: set fileencoding=utf-8 : - -"""This script evaluates the given score files and computes EER, HTER. -It also is able to plot CMC and ROC curves. -You can set the environment variable BOB_NO_STYLE_CHANGES to any value to avoid -this script from changing the matplotlib style values. """ - -from __future__ import print_function - -# matplotlib stuff -import matplotlib -from matplotlib import pyplot -pyplot.switch_backend('pdf') # switch to non-X backend -from matplotlib.backends.backend_pdf import PdfPages - -# import bob.measure after matplotlib, so that it cannot define the backend -import bob.measure - -import argparse -import numpy -import math -import os - - -if not os.environ.get('BOB_NO_STYLE_CHANGES'): - # make the fig size smaller so that everything becomes bigger - matplotlib.rc('figure', figsize=(4, 3)) - - -import bob.core -logger = bob.core.log.setup("bob.bio.base") - - -def command_line_arguments(command_line_parameters): - """Parse the program options""" - - # set up command line parser - parser = argparse.ArgumentParser(description=__doc__, - formatter_class=argparse.ArgumentDefaultsHelpFormatter) - - parser.add_argument('-d', '--dev-files', required=True, nargs='+', help = "A list of score files of the development set.") - parser.add_argument('-e', '--eval-files', nargs='+', help = "A list of score files of the evaluation set; if given it must be the same number of files as the --dev-files.") - - parser.add_argument('-s', '--directory', default = '.', help = "A directory, where to find the --dev-files and the --eval-files") - - parser.add_argument('-c', '--criterion', choices = ('EER', 'HTER', 'FAR'), help = "If given, the threshold of the development set will be computed with this criterion.") - parser.add_argument('-f', '--far-value', type=float, default=0.001, help = "The FAR value for which to evaluate (only for --criterion FAR)") - parser.add_argument('-x', '--cllr', action = 'store_true', help = "If given, Cllr and minCllr will be computed.") - parser.add_argument('-m', '--mindcf', action = 'store_true', help = "If given, minDCF will be computed.") - parser.add_argument('--cost', default=0.99, help='Cost for FAR in minDCF') - parser.add_argument('-r', '--rr', action = 'store_true', help = "If given, the Recognition Rate will be computed.") - parser.add_argument('-o', '--rank', type=int, default=1, help = "The rank for which to plot the DIR curve") - parser.add_argument('-t', '--thresholds', type=float, nargs='+', help = "If given, the Recognition Rate will incorporate an Open Set handling, rejecting all scores that are below the given threshold; when multiple thresholds are given, they are applied in the same order as the --dev-files.") - parser.add_argument('-l', '--legends', nargs='+', help = "A list of legend strings used for ROC, CMC and DET plots; if given, must be the same number than --dev-files.") - parser.add_argument('-F', '--legend-font-size', type=int, default=10, help = "Set the font size of the legends.") - parser.add_argument('-P', '--legend-position', type=int, help = "Set the font size of the legends.") - parser.add_argument('-T', '--title', nargs = '+', help = "Overwrite the default title of the plot for development (and evaluation) set") - parser.add_argument('-R', '--roc', help = "If given, ROC curves will be plotted into the given pdf file.") - parser.add_argument('-D', '--det', help = "If given, DET curves will be plotted into the given pdf file.") - parser.add_argument('-C', '--cmc', help = "If given, CMC curves will be plotted into the given pdf file.") - parser.add_argument('-O', '--dir', help = "If given, DIR curves will be plotted into the given pdf file; This is an open-set measure, which cannot be applied to closed set score files.") - parser.add_argument('-E', '--epc', help = "If given, EPC curves will be plotted into the given pdf file. For this plot --eval-files is mandatory.") - parser.add_argument('-M', '--min-far-value', type=float, default=1e-4, help = "Select the minimum FAR value used in ROC plots; should be a power of 10.") - parser.add_argument('-L', '--far-line-at', type=float, help = "If given, draw a veritcal line at this FAR value in the ROC plots.") - - # add verbose option - bob.core.log.add_command_line_option(parser) - - # parse arguments - args = parser.parse_args(command_line_parameters) - - # set verbosity level - bob.core.log.set_verbosity_level(logger, args.verbose) - - # some sanity checks: - for f in args.dev_files + (args.eval_files or []): - real_file = os.path.join(args.directory, f) - if not os.path.exists(real_file): - raise ValueError("The provided score file '%s' does not exist" % real_file) - - if args.eval_files is not None and len(args.dev_files) != len(args.eval_files): - logger.error("The number of --dev-files (%d) and --eval-files (%d) are not identical", len(args.dev_files), len(args.eval_files)) - - # update legends when they are not specified on command line - if args.legends is None: - args.legends = [f.replace('_', '-') for f in args.dev_files] - logger.warn("Legends are not specified; using legends estimated from --dev-files: %s", args.legends) - - # check that the legends have the same length as the dev-files - if len(args.dev_files) != len(args.legends): - logger.error("The number of --dev-files (%d) and --legends (%d) are not identical", len(args.dev_files), len(args.legends)) - - if args.thresholds is not None: - if len(args.thresholds) == 1: - args.thresholds = args.thresholds * len(args.dev_files) - elif len(args.thresholds) != len(args.dev_files): - logger.error("If given, the number of --thresholds imust be either 1, or the same as --dev-files (%d), but it is %d", len(args.dev_files), len(args.thresholds)) - else: - args.thresholds = [None] * len(args.dev_files) - - if args.title is not None: - if args.eval_files is None and len(args.title) != 1: - logger.warning("Ignoring the title for the evaluation set, as no evaluation set is given") - if args.eval_files is not None and len(args.title) < 2: - logger.error("The title for the evaluation set is not specified") - - return args - -def _add_far_labels(min_far): - # compute and apply tick marks - assert min_far > 0 - ticks = [min_far] - while ticks[-1] < 1.: ticks.append(ticks[-1] * 10.) - pyplot.xticks(ticks) - pyplot.axis([min_far, 1., -0.01, 1.01]) - - - -def _plot_roc(frrs, colors, labels, title, fontsize=10, position=None, farfrrs=None, min_far=None): - if position is None: position = 'lower right' - figure = pyplot.figure() - - # plot FAR and CAR for each algorithm - for i in range(len(frrs)): - pyplot.semilogx([f for f in frrs[i][0]], [1. - f for f in frrs[i][1]], color=colors[i], label=labels[i]) - if isinstance(farfrrs, list): - pyplot.plot(farfrrs[i][0], (1.-farfrrs[i][1]), 'o', color=colors[i], markeredgecolor=colors[i]) - - # plot vertical bar, if desired - if farfrrs is not None: - if isinstance(farfrrs, float): - pyplot.plot([farfrrs,farfrrs],[0.,1.], "--", color='black') - else: - pyplot.plot([x[0] for x in farfrrs], [(1.-x[1]) for x in farfrrs], '--', color='black') - - _add_far_labels(min_far) - - # set label, legend and title - pyplot.xlabel('FMR') - pyplot.ylabel('1 - FNMR') - pyplot.grid(True, color=(0.6,0.6,0.6)) - pyplot.legend(loc=position, prop = {'size':fontsize}) - pyplot.title(title) - - return figure - - -def _plot_det(dets, colors, labels, title, fontsize=10, position=None): - if position is None: position = 'upper right' - # open new page for current plot - figure = pyplot.figure(figsize=(matplotlib.rcParams['figure.figsize'][0], - matplotlib.rcParams['figure.figsize'][0] * 0.975)) - pyplot.grid(True) - - # plot the DET curves - for i in range(len(dets)): - pyplot.plot(dets[i][0], dets[i][1], color=colors[i], label=labels[i]) - - # change axes accordingly - det_list = [0.0002, 0.001, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 0.7, 0.9, 0.95] - ticks = [bob.measure.ppndf(d) for d in det_list] - labels = [("%.5f" % d).rstrip('0').rstrip('.') for d in det_list] - pyplot.xticks(ticks, [l if i % 2 else "" for i,l in enumerate(labels)]) - pyplot.yticks(ticks, labels) - pyplot.axis((ticks[0], ticks[-1], ticks[0], ticks[-1])) - - pyplot.xlabel('FMR') - pyplot.ylabel('FNMR') - pyplot.legend(loc=position, prop = {'size':fontsize}) - pyplot.title(title) - - return figure - - -def _plot_cmc(cmcs, colors, labels, title, fontsize=10, position=None): - if position is None: position = 'lower right' - # open new page for current plot - figure = pyplot.figure() - - max_R = 0 - # plot the CMC curves - for i in range(len(cmcs)): - probs = bob.measure.cmc(cmcs[i]) - R = len(probs) - pyplot.semilogx(range(1, R+1), probs, figure=figure, color=colors[i], label=labels[i]) - max_R = max(R, max_R) - - # change axes accordingly - ticks = [int(t) for t in pyplot.xticks()[0]] - pyplot.xlabel('Rank') - pyplot.ylabel('Probability') - pyplot.xticks(ticks, [str(t) for t in ticks]) - pyplot.axis([0, max_R, -0.01, 1.01]) - pyplot.legend(loc=position, prop = {'size':fontsize}) - pyplot.title(title) - - return figure - - -def _plot_dir(cmc_scores, far_values, rank, colors, labels, title, fontsize=10, position=None): - if position is None: position = 'lower right' - # open new page for current plot - figure = pyplot.figure() - - # for each probe, for which no positives exists, get the highest negative - # score; and sort them to compute the FAR thresholds - for i, cmcs in enumerate(cmc_scores): - negatives = sorted(max(neg) for neg, pos in cmcs if (pos is None or not numpy.array(pos).size) and neg is not None) - if not negatives: - raise ValueError("There need to be at least one pair with only negative scores") - - # compute thresholds based on FAR values - thresholds = [bob.measure.far_threshold(negatives, [], v, True) for v in far_values] - - # compute detection and identification rate based on the thresholds for - # the given rank - rates = [bob.measure.detection_identification_rate(cmcs, t, rank) for t in thresholds] - - # plot DIR curve - pyplot.semilogx(far_values, rates, figure=figure, color=colors[i], label=labels[i]) - - # finalize plot - _add_far_labels(far_values[0]) - - pyplot.xlabel('FAR') - pyplot.ylabel('DIR') - pyplot.legend(loc=position, prop = {'size':fontsize}) - pyplot.title(title) - - return figure - - -def _plot_epc(scores_dev, scores_eval, colors, labels, title, fontsize=10, position=None): - if position is None: position = 'upper center' - # open new page for current plot - figure = pyplot.figure() - - # plot the DET curves - for i in range(len(scores_dev)): - x,y = bob.measure.epc(scores_dev[i][0], scores_dev[i][1], scores_eval[i][0], scores_eval[i][1], 100) - pyplot.plot(x, y, color=colors[i], label=labels[i]) - - # change axes accordingly - pyplot.xlabel('alpha') - pyplot.ylabel('HTER') - pyplot.title(title) - pyplot.axis([-0.01, 1.01, -0.01, 0.51]) - pyplot.grid(True) - pyplot.legend(loc=position, prop = {'size':fontsize}) - pyplot.title(title) - - return figure - - -def remove_nan(scores): - """removes the NaNs from the scores""" - nans = numpy.isnan(scores) - sum_nans = sum(nans) - total = len(scores) - return scores[numpy.where(~nans)], sum_nans, total - - -def get_fta(scores): - """calculates the Failure To Acquire (FtA) rate""" - fta_sum, fta_total = 0, 0 - neg, sum_nans, total = remove_nan(scores[0]) - fta_sum += sum_nans - fta_total += total - pos, sum_nans, total = remove_nan(scores[1]) - fta_sum += sum_nans - fta_total += total - return (neg, pos, fta_sum * 100 / float(fta_total)) - - -def main(command_line_parameters=None): - """Reads score files, computes error measures and plots curves.""" - - args = command_line_arguments(command_line_parameters) - - # get some colors for plotting - if len(args.dev_files) > 10: - cmap = pyplot.cm.get_cmap(name='magma') - colors = [cmap(i) for i in numpy.linspace(0, 1.0, len(args.dev_files) + 1)] - else: - # matplotlib 2.0 default color cycler list: Vega category10 palette - colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', - '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', - '#bcbd22', '#17becf'] - - if args.criterion or args.roc or args.det or args.epc or args.cllr or args.mindcf: - - # First, read the score files - logger.info("Loading %d score files of the development set", len(args.dev_files)) - scores_dev = [bob.measure.load.split(os.path.join(args.directory, f)) for f in args.dev_files] - # remove nans - scores_dev = [get_fta(s) for s in scores_dev] - - if args.eval_files: - logger.info("Loading %d score files of the evaluation set", len(args.eval_files)) - scores_eval = [bob.measure.load.split(os.path.join(args.directory, f)) for f in args.eval_files] - # remove nans - scores_eval = [get_fta(s) for s in scores_eval] - - - if args.criterion: - logger.info("Computing %s on the development " % args.criterion + ("and HTER on the evaluation set" if args.eval_files else "set")) - for i in range(len(scores_dev)): - # compute threshold on development set - if args.criterion == 'FAR': - threshold = bob.measure.far_threshold(scores_dev[i][0], scores_dev[i][1], args.far_value/100.) - else: - threshold = {'EER': bob.measure.eer_threshold, 'HTER' : bob.measure.min_hter_threshold} [args.criterion](scores_dev[i][0], scores_dev[i][1]) - # apply threshold to development set - far, frr = bob.measure.farfrr(scores_dev[i][0], scores_dev[i][1], threshold) - if args.criterion == 'FAR': - print("The FRR at FAR=%.1E of the development set of '%s' is %2.3f%% (CAR: %2.3f%%)" % (args.far_value, args.legends[i], frr * 100., 100.*(1-frr))) - else: - print("The %s of the development set of '%s' is %2.3f%%" % (args.criterion, args.legends[i], (far + frr) * 50.)) # / 2 * 100% - if args.eval_files: - # apply threshold to evaluation set - far, frr = bob.measure.farfrr(scores_eval[i][0], scores_eval[i][1], threshold) - if args.criterion == 'FAR': - print("The FRR of the evaluation set of '%s' is %2.3f%% (CAR: %2.3f%%)" % (args.legends[i], frr * 100., 100.*(1-frr))) # / 2 * 100% - else: - print("The HTER of the evaluation set of '%s' is %2.3f%%" % (args.legends[i], (far + frr) * 50.)) # / 2 * 100% - - - if args.mindcf: - logger.info("Computing minDCF on the development " + ("and on the evaluation set" if args.eval_files else "set")) - for i in range(len(scores_dev)): - # compute threshold on development set - threshold = bob.measure.min_weighted_error_rate_threshold(scores_dev[i][0], scores_dev[i][1], args.cost) - # apply threshold to development set - far, frr = bob.measure.farfrr(scores_dev[i][0], scores_dev[i][1], threshold) - print("The minDCF of the development set of '%s' is %2.3f%%" % (args.legends[i], (args.cost * far + (1-args.cost) * frr) * 100. )) - if args.eval_files: - # compute threshold on evaluation set - threshold = bob.measure.min_weighted_error_rate_threshold(scores_eval[i][0], scores_eval[i][1], args.cost) - # apply threshold to evaluation set - far, frr = bob.measure.farfrr(scores_eval[i][0], scores_eval[i][1], threshold) - print("The minDCF of the evaluation set of '%s' is %2.3f%%" % (args.legends[i], (args.cost * far + (1-args.cost) * frr) * 100. )) - - - if args.cllr: - logger.info("Computing Cllr and minCllr on the development " + ("and on the evaluation set" if args.eval_files else "set")) - for i in range(len(scores_dev)): - cllr = bob.measure.calibration.cllr(scores_dev[i][0], scores_dev[i][1]) - min_cllr = bob.measure.calibration.min_cllr(scores_dev[i][0], scores_dev[i][1]) - print("Calibration performance on development set of '%s' is Cllr %1.5f and minCllr %1.5f " % (args.legends[i], cllr, min_cllr)) - if args.eval_files: - cllr = bob.measure.calibration.cllr(scores_eval[i][0], scores_eval[i][1]) - min_cllr = bob.measure.calibration.min_cllr(scores_eval[i][0], scores_eval[i][1]) - print("Calibration performance on evaluation set of '%s' is Cllr %1.5f and minCllr %1.5f" % (args.legends[i], cllr, min_cllr)) - - - if args.roc: - logger.info("Computing CAR curves on the development " + ("and on the evaluation set" if args.eval_files else "set")) - min_far = int(math.floor(math.log(args.min_far_value, 10))) - fars = [math.pow(10., i * 0.25) for i in range(min_far * 4, 0)] + [1.] - frrs_dev = [bob.measure.roc_for_far(scores[0], scores[1], fars) for scores in scores_dev] - if args.eval_files: - frrs_eval = [bob.measure.roc_for_far(scores[0], scores[1], fars) for scores in scores_eval] - - logger.info("Plotting ROC curves to file '%s'", args.roc) - try: - # create a multi-page PDF for the ROC curve - pdf = PdfPages(args.roc) - # create a separate figure for dev and eval - pdf.savefig(_plot_roc(frrs_dev, colors, args.legends, args.title[0] if args.title is not None else "ROC for development set", args.legend_font_size, args.legend_position, args.far_line_at, min_far=args.min_far_value), bbox_inches='tight') - del frrs_dev - if args.eval_files: - if args.far_line_at is not None: - farfrrs = [] - for i in range(len(scores_dev)): - threshold = bob.measure.far_threshold(scores_dev[i][0], scores_dev[i][1], args.far_line_at) - farfrrs.append(bob.measure.farfrr(scores_eval[i][0], scores_eval[i][1], threshold)) - else: - farfrrs = None - pdf.savefig(_plot_roc(frrs_eval, colors, args.legends, args.title[1] if args.title is not None else "ROC for evaluation set", args.legend_font_size, args.legend_position, farfrrs, min_far=args.min_far_value), bbox_inches='tight') - del frrs_eval - pdf.close() - except RuntimeError as e: - raise RuntimeError("During plotting of ROC curves, the following exception occured:\n%s" % e) - - if args.det: - logger.info("Computing DET curves on the development " + ("and on the evaluation set" if args.eval_files else "set")) - dets_dev = [bob.measure.det(scores[0], scores[1], 1000) for scores in scores_dev] - if args.eval_files: - dets_eval = [bob.measure.det(scores[0], scores[1], 1000) for scores in scores_eval] - - logger.info("Plotting DET curves to file '%s'", args.det) - try: - # create a multi-page PDF for the DET curve - pdf = PdfPages(args.det) - # create a separate figure for dev and eval - pdf.savefig(_plot_det(dets_dev, colors, args.legends, args.title[0] if args.title is not None else "DET for development set", args.legend_font_size, args.legend_position), bbox_inches='tight') - del dets_dev - if args.eval_files: - pdf.savefig(_plot_det(dets_eval, colors, args.legends, args.title[1] if args.title is not None else "DET for evaluation set", args.legend_font_size, args.legend_position), bbox_inches='tight') - del dets_eval - pdf.close() - except RuntimeError as e: - raise RuntimeError("During plotting of DET curves, the following exception occured:\n%s" % e) - - - if args.epc: - logger.info("Plotting EPC curves to file '%s'", args.epc) - - if not args.eval_files: - raise ValueError("To plot the EPC curve the evaluation scores are necessary. Please, set it with the --eval-files option.") - - try: - # create a multi-page PDF for the EPC curve - pdf = PdfPages(args.epc) - pdf.savefig(_plot_epc(scores_dev, scores_eval, colors, args.legends, args.title[0] if args.title is not None else "" , args.legend_font_size, args.legend_position), bbox_inches='tight') - pdf.close() - except RuntimeError as e: - raise RuntimeError("During plotting of EPC curves, the following exception occured:\n%s" % e) - - - - if args.cmc or args.rr or args.dir: - logger.info("Loading CMC data on the development " + ("and on the evaluation set" if args.eval_files else "set")) - cmcs_dev = [bob.measure.load.cmc(os.path.join(args.directory, f)) for f in args.dev_files] - if args.eval_files: - cmcs_eval = [bob.measure.load.cmc(os.path.join(args.directory, f)) for f in args.eval_files] - - if args.cmc: - logger.info("Plotting CMC curves to file '%s'", args.cmc) - try: - # create a multi-page PDF for the CMC curve - pdf = PdfPages(args.cmc) - # create a separate figure for dev and eval - pdf.savefig(_plot_cmc(cmcs_dev, colors, args.legends, args.title[0] if args.title is not None else "CMC curve for development set", args.legend_font_size, args.legend_position), bbox_inches='tight') - if args.eval_files: - pdf.savefig(_plot_cmc(cmcs_eval, colors, args.legends, args.title[1] if args.title is not None else "CMC curve for evaluation set", args.legend_font_size, args.legend_position), bbox_inches='tight') - pdf.close() - except RuntimeError as e: - raise RuntimeError("During plotting of CMC curves, the following exception occured:\n%s\nUsually this happens when the label contains characters that LaTeX cannot parse." % e) - - if args.rr: - logger.info("Computing recognition rate on the development " + ("and on the evaluation set" if args.eval_files else "set")) - for i in range(len(cmcs_dev)): - rr = bob.measure.recognition_rate(cmcs_dev[i], args.thresholds[i]) - print("The Recognition Rate of the development set of '%s' is %2.3f%%" % (args.legends[i], rr * 100.)) - if args.eval_files: - rr = bob.measure.recognition_rate(cmcs_eval[i], args.thresholds[i]) - print("The Recognition Rate of the development set of '%s' is %2.3f%%" % (args.legends[i], rr * 100.)) - - if args.dir: - # compute false alarm values to evaluate - min_far = int(math.floor(math.log(args.min_far_value, 10))) - fars = [math.pow(10., i * 0.25) for i in range(min_far * 4, 0)] + [1.] - logger.info("Plotting DIR curves to file '%s'", args.dir) - try: - # create a multi-page PDF for the DIR curve - pdf = PdfPages(args.dir) - # create a separate figure for dev and eval - pdf.savefig(_plot_dir(cmcs_dev, fars, args.rank, colors, args.legends, args.title[0] if args.title is not None else "DIR curve for development set", args.legend_font_size, args.legend_position), bbox_inches='tight') - if args.eval_files: - pdf.savefig(_plot_dir(cmcs_eval, fars, args.rank, colors, args.legends, args.title[1] if args.title is not None else "DIR curve for evaluation set", args.legend_font_size, args.legend_position), bbox_inches='tight') - pdf.close() - except RuntimeError as e: - raise RuntimeError("During plotting of DIR curves, the following exception occured:\n%s" % e) +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : + +"""This script evaluates the given score files and computes EER, HTER. +It also is able to plot CMC and ROC curves. +You can set the environment variable BOB_NO_STYLE_CHANGES to any value to avoid +this script from changing the matplotlib style values. """ + +from __future__ import print_function + +# matplotlib stuff +import matplotlib +from matplotlib import pyplot +pyplot.switch_backend('pdf') # switch to non-X backend +from matplotlib.backends.backend_pdf import PdfPages + +# import bob.measure after matplotlib, so that it cannot define the backend + +import argparse +import numpy +import math +import os + +import bob.measure +from .. import score + + +if not os.environ.get('BOB_NO_STYLE_CHANGES'): + # make the fig size smaller so that everything becomes bigger + matplotlib.rc('figure', figsize=(4, 3)) + + +import bob.core +logger = bob.core.log.setup("bob.bio.base") + + +def command_line_arguments(command_line_parameters): + """Parse the program options""" + + # set up command line parser + parser = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + parser.add_argument('-d', '--dev-files', required=True, nargs='+', help = "A list of score files of the development set.") + parser.add_argument('-e', '--eval-files', nargs='+', help = "A list of score files of the evaluation set; if given it must be the same number of files as the --dev-files.") + + parser.add_argument('-s', '--directory', default = '.', help = "A directory, where to find the --dev-files and the --eval-files") + + parser.add_argument('-c', '--criterion', choices = ('EER', 'HTER', 'FAR'), help = "If given, the threshold of the development set will be computed with this criterion.") + parser.add_argument('-f', '--far-value', type=float, default=0.001, help = "The FAR value for which to evaluate (only for --criterion FAR)") + parser.add_argument('-x', '--cllr', action = 'store_true', help = "If given, Cllr and minCllr will be computed.") + parser.add_argument('-m', '--mindcf', action = 'store_true', help = "If given, minDCF will be computed.") + parser.add_argument('--cost', default=0.99, help='Cost for FAR in minDCF') + parser.add_argument('-r', '--rr', action = 'store_true', help = "If given, the Recognition Rate will be computed.") + parser.add_argument('-o', '--rank', type=int, default=1, help = "The rank for which to plot the DIR curve") + parser.add_argument('-t', '--thresholds', type=float, nargs='+', help = "If given, the Recognition Rate will incorporate an Open Set handling, rejecting all scores that are below the given threshold; when multiple thresholds are given, they are applied in the same order as the --dev-files.") + parser.add_argument('-l', '--legends', nargs='+', help = "A list of legend strings used for ROC, CMC and DET plots; if given, must be the same number than --dev-files.") + parser.add_argument('-F', '--legend-font-size', type=int, default=10, help = "Set the font size of the legends.") + parser.add_argument('-P', '--legend-position', type=int, help = "Set the font size of the legends.") + parser.add_argument('-T', '--title', nargs = '+', help = "Overwrite the default title of the plot for development (and evaluation) set") + parser.add_argument('-R', '--roc', help = "If given, ROC curves will be plotted into the given pdf file.") + parser.add_argument('-D', '--det', help = "If given, DET curves will be plotted into the given pdf file.") + parser.add_argument('-C', '--cmc', help = "If given, CMC curves will be plotted into the given pdf file.") + parser.add_argument('-O', '--dir', help = "If given, DIR curves will be plotted into the given pdf file; This is an open-set measure, which cannot be applied to closed set score files.") + parser.add_argument('-E', '--epc', help = "If given, EPC curves will be plotted into the given pdf file. For this plot --eval-files is mandatory.") + parser.add_argument('-M', '--min-far-value', type=float, default=1e-4, help = "Select the minimum FAR value used in ROC plots; should be a power of 10.") + parser.add_argument('-L', '--far-line-at', type=float, help = "If given, draw a veritcal line at this FAR value in the ROC plots.") + + # add verbose option + bob.core.log.add_command_line_option(parser) + + # parse arguments + args = parser.parse_args(command_line_parameters) + + # set verbosity level + bob.core.log.set_verbosity_level(logger, args.verbose) + + # some sanity checks: + for f in args.dev_files + (args.eval_files or []): + real_file = os.path.join(args.directory, f) + if not os.path.exists(real_file): + raise ValueError("The provided score file '%s' does not exist" % real_file) + + if args.eval_files is not None and len(args.dev_files) != len(args.eval_files): + logger.error("The number of --dev-files (%d) and --eval-files (%d) are not identical", len(args.dev_files), len(args.eval_files)) + + # update legends when they are not specified on command line + if args.legends is None: + args.legends = [f.replace('_', '-') for f in args.dev_files] + logger.warn("Legends are not specified; using legends estimated from --dev-files: %s", args.legends) + + # check that the legends have the same length as the dev-files + if len(args.dev_files) != len(args.legends): + logger.error("The number of --dev-files (%d) and --legends (%d) are not identical", len(args.dev_files), len(args.legends)) + + if args.thresholds is not None: + if len(args.thresholds) == 1: + args.thresholds = args.thresholds * len(args.dev_files) + elif len(args.thresholds) != len(args.dev_files): + logger.error("If given, the number of --thresholds imust be either 1, or the same as --dev-files (%d), but it is %d", len(args.dev_files), len(args.thresholds)) + else: + args.thresholds = [None] * len(args.dev_files) + + if args.title is not None: + if args.eval_files is None and len(args.title) != 1: + logger.warning("Ignoring the title for the evaluation set, as no evaluation set is given") + if args.eval_files is not None and len(args.title) < 2: + logger.error("The title for the evaluation set is not specified") + + return args + +def _add_far_labels(min_far): + # compute and apply tick marks + assert min_far > 0 + ticks = [min_far] + while ticks[-1] < 1.: ticks.append(ticks[-1] * 10.) + pyplot.xticks(ticks) + pyplot.axis([min_far, 1., -0.01, 1.01]) + + + +def _plot_roc(frrs, colors, labels, title, fontsize=10, position=None, farfrrs=None, min_far=None): + if position is None: position = 'lower right' + figure = pyplot.figure() + + # plot FAR and CAR for each algorithm + for i in range(len(frrs)): + pyplot.semilogx([f for f in frrs[i][0]], [1. - f for f in frrs[i][1]], color=colors[i], label=labels[i]) + if isinstance(farfrrs, list): + pyplot.plot(farfrrs[i][0], (1.-farfrrs[i][1]), 'o', color=colors[i], markeredgecolor=colors[i]) + + # plot vertical bar, if desired + if farfrrs is not None: + if isinstance(farfrrs, float): + pyplot.plot([farfrrs,farfrrs],[0.,1.], "--", color='black') + else: + pyplot.plot([x[0] for x in farfrrs], [(1.-x[1]) for x in farfrrs], '--', color='black') + + _add_far_labels(min_far) + + # set label, legend and title + pyplot.xlabel('FMR') + pyplot.ylabel('1 - FNMR') + pyplot.grid(True, color=(0.6,0.6,0.6)) + pyplot.legend(loc=position, prop = {'size':fontsize}) + pyplot.title(title) + + return figure + + +def _plot_det(dets, colors, labels, title, fontsize=10, position=None): + if position is None: position = 'upper right' + # open new page for current plot + figure = pyplot.figure(figsize=(matplotlib.rcParams['figure.figsize'][0], + matplotlib.rcParams['figure.figsize'][0] * 0.975)) + pyplot.grid(True) + + # plot the DET curves + for i in range(len(dets)): + pyplot.plot(dets[i][0], dets[i][1], color=colors[i], label=labels[i]) + + # change axes accordingly + det_list = [0.0002, 0.001, 0.005, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 0.7, 0.9, 0.95] + ticks = [bob.measure.ppndf(d) for d in det_list] + labels = [("%.5f" % d).rstrip('0').rstrip('.') for d in det_list] + pyplot.xticks(ticks, [l if i % 2 else "" for i,l in enumerate(labels)]) + pyplot.yticks(ticks, labels) + pyplot.axis((ticks[0], ticks[-1], ticks[0], ticks[-1])) + + pyplot.xlabel('FMR') + pyplot.ylabel('FNMR') + pyplot.legend(loc=position, prop = {'size':fontsize}) + pyplot.title(title) + + return figure + + +def _plot_cmc(cmcs, colors, labels, title, fontsize=10, position=None): + if position is None: position = 'lower right' + # open new page for current plot + figure = pyplot.figure() + + max_R = 0 + # plot the CMC curves + for i in range(len(cmcs)): + probs = bob.measure.cmc(cmcs[i]) + R = len(probs) + pyplot.semilogx(range(1, R+1), probs, figure=figure, color=colors[i], label=labels[i]) + max_R = max(R, max_R) + + # change axes accordingly + ticks = [int(t) for t in pyplot.xticks()[0]] + pyplot.xlabel('Rank') + pyplot.ylabel('Probability') + pyplot.xticks(ticks, [str(t) for t in ticks]) + pyplot.axis([0, max_R, -0.01, 1.01]) + pyplot.legend(loc=position, prop = {'size':fontsize}) + pyplot.title(title) + + return figure + + +def _plot_dir(cmc_scores, far_values, rank, colors, labels, title, fontsize=10, position=None): + if position is None: position = 'lower right' + # open new page for current plot + figure = pyplot.figure() + + # for each probe, for which no positives exists, get the highest negative + # score; and sort them to compute the FAR thresholds + for i, cmcs in enumerate(cmc_scores): + negatives = sorted(max(neg) for neg, pos in cmcs if (pos is None or not numpy.array(pos).size) and neg is not None) + if not negatives: + raise ValueError("There need to be at least one pair with only negative scores") + + # compute thresholds based on FAR values + thresholds = [bob.measure.far_threshold(negatives, [], v, True) for v in far_values] + + # compute detection and identification rate based on the thresholds for + # the given rank + rates = [bob.measure.detection_identification_rate(cmcs, t, rank) for t in thresholds] + + # plot DIR curve + pyplot.semilogx(far_values, rates, figure=figure, color=colors[i], label=labels[i]) + + # finalize plot + _add_far_labels(far_values[0]) + + pyplot.xlabel('FAR') + pyplot.ylabel('DIR') + pyplot.legend(loc=position, prop = {'size':fontsize}) + pyplot.title(title) + + return figure + + +def _plot_epc(scores_dev, scores_eval, colors, labels, title, fontsize=10, position=None): + if position is None: position = 'upper center' + # open new page for current plot + figure = pyplot.figure() + + # plot the DET curves + for i in range(len(scores_dev)): + x,y = bob.measure.epc(scores_dev[i][0], scores_dev[i][1], scores_eval[i][0], scores_eval[i][1], 100) + pyplot.plot(x, y, color=colors[i], label=labels[i]) + + # change axes accordingly + pyplot.xlabel('alpha') + pyplot.ylabel('HTER') + pyplot.title(title) + pyplot.axis([-0.01, 1.01, -0.01, 0.51]) + pyplot.grid(True) + pyplot.legend(loc=position, prop = {'size':fontsize}) + pyplot.title(title) + + return figure + + +def remove_nan(scores): + """removes the NaNs from the scores""" + nans = numpy.isnan(scores) + sum_nans = sum(nans) + total = len(scores) + return scores[numpy.where(~nans)], sum_nans, total + + +def get_fta(scores): + """calculates the Failure To Acquire (FtA) rate""" + fta_sum, fta_total = 0, 0 + neg, sum_nans, total = remove_nan(scores[0]) + fta_sum += sum_nans + fta_total += total + pos, sum_nans, total = remove_nan(scores[1]) + fta_sum += sum_nans + fta_total += total + return (neg, pos, fta_sum * 100 / float(fta_total)) + + +def main(command_line_parameters=None): + """Reads score files, computes error measures and plots curves.""" + + args = command_line_arguments(command_line_parameters) + + # get some colors for plotting + if len(args.dev_files) > 10: + cmap = pyplot.cm.get_cmap(name='magma') + colors = [cmap(i) for i in numpy.linspace(0, 1.0, len(args.dev_files) + 1)] + else: + # matplotlib 2.0 default color cycler list: Vega category10 palette + colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', + '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', + '#bcbd22', '#17becf'] + + if args.criterion or args.roc or args.det or args.epc or args.cllr or args.mindcf: + + # First, read the score files + logger.info("Loading %d score files of the development set", len(args.dev_files)) + scores_dev = [score.split(os.path.join(args.directory, f)) for f in args.dev_files] + # remove nans + scores_dev = [get_fta(s) for s in scores_dev] + + if args.eval_files: + logger.info("Loading %d score files of the evaluation set", len(args.eval_files)) + scores_eval = [score.split(os.path.join(args.directory, f)) for f in args.eval_files] + # remove nans + scores_eval = [get_fta(s) for s in scores_eval] + + + if args.criterion: + logger.info("Computing %s on the development " % args.criterion + ("and HTER on the evaluation set" if args.eval_files else "set")) + for i in range(len(scores_dev)): + # compute threshold on development set + if args.criterion == 'FAR': + threshold = bob.measure.far_threshold(scores_dev[i][0], scores_dev[i][1], args.far_value/100.) + else: + threshold = {'EER': bob.measure.eer_threshold, 'HTER' : bob.measure.min_hter_threshold} [args.criterion](scores_dev[i][0], scores_dev[i][1]) + # apply threshold to development set + far, frr = bob.measure.farfrr(scores_dev[i][0], scores_dev[i][1], threshold) + if args.criterion == 'FAR': + print("The FRR at FAR=%.1E of the development set of '%s' is %2.3f%% (CAR: %2.3f%%)" % (args.far_value, args.legends[i], frr * 100., 100.*(1-frr))) + else: + print("The %s of the development set of '%s' is %2.3f%%" % (args.criterion, args.legends[i], (far + frr) * 50.)) # / 2 * 100% + if args.eval_files: + # apply threshold to evaluation set + far, frr = bob.measure.farfrr(scores_eval[i][0], scores_eval[i][1], threshold) + if args.criterion == 'FAR': + print("The FRR of the evaluation set of '%s' is %2.3f%% (CAR: %2.3f%%)" % (args.legends[i], frr * 100., 100.*(1-frr))) # / 2 * 100% + else: + print("The HTER of the evaluation set of '%s' is %2.3f%%" % (args.legends[i], (far + frr) * 50.)) # / 2 * 100% + + + if args.mindcf: + logger.info("Computing minDCF on the development " + ("and on the evaluation set" if args.eval_files else "set")) + for i in range(len(scores_dev)): + # compute threshold on development set + threshold = bob.measure.min_weighted_error_rate_threshold(scores_dev[i][0], scores_dev[i][1], args.cost) + # apply threshold to development set + far, frr = bob.measure.farfrr(scores_dev[i][0], scores_dev[i][1], threshold) + print("The minDCF of the development set of '%s' is %2.3f%%" % (args.legends[i], (args.cost * far + (1-args.cost) * frr) * 100. )) + if args.eval_files: + # compute threshold on evaluation set + threshold = bob.measure.min_weighted_error_rate_threshold(scores_eval[i][0], scores_eval[i][1], args.cost) + # apply threshold to evaluation set + far, frr = bob.measure.farfrr(scores_eval[i][0], scores_eval[i][1], threshold) + print("The minDCF of the evaluation set of '%s' is %2.3f%%" % (args.legends[i], (args.cost * far + (1-args.cost) * frr) * 100. )) + + + if args.cllr: + logger.info("Computing Cllr and minCllr on the development " + ("and on the evaluation set" if args.eval_files else "set")) + for i in range(len(scores_dev)): + cllr = bob.measure.calibration.cllr(scores_dev[i][0], scores_dev[i][1]) + min_cllr = bob.measure.calibration.min_cllr(scores_dev[i][0], scores_dev[i][1]) + print("Calibration performance on development set of '%s' is Cllr %1.5f and minCllr %1.5f " % (args.legends[i], cllr, min_cllr)) + if args.eval_files: + cllr = bob.measure.calibration.cllr(scores_eval[i][0], scores_eval[i][1]) + min_cllr = bob.measure.calibration.min_cllr(scores_eval[i][0], scores_eval[i][1]) + print("Calibration performance on evaluation set of '%s' is Cllr %1.5f and minCllr %1.5f" % (args.legends[i], cllr, min_cllr)) + + + if args.roc: + logger.info("Computing CAR curves on the development " + ("and on the evaluation set" if args.eval_files else "set")) + min_far = int(math.floor(math.log(args.min_far_value, 10))) + fars = [math.pow(10., i * 0.25) for i in range(min_far * 4, 0)] + [1.] + frrs_dev = [bob.measure.roc_for_far(scores[0], scores[1], fars) for scores in scores_dev] + if args.eval_files: + frrs_eval = [bob.measure.roc_for_far(scores[0], scores[1], fars) for scores in scores_eval] + + logger.info("Plotting ROC curves to file '%s'", args.roc) + try: + # create a multi-page PDF for the ROC curve + pdf = PdfPages(args.roc) + # create a separate figure for dev and eval + pdf.savefig(_plot_roc(frrs_dev, colors, args.legends, args.title[0] if args.title is not None else "ROC for development set", args.legend_font_size, args.legend_position, args.far_line_at, min_far=args.min_far_value), bbox_inches='tight') + del frrs_dev + if args.eval_files: + if args.far_line_at is not None: + farfrrs = [] + for i in range(len(scores_dev)): + threshold = bob.measure.far_threshold(scores_dev[i][0], scores_dev[i][1], args.far_line_at) + farfrrs.append(bob.measure.farfrr(scores_eval[i][0], scores_eval[i][1], threshold)) + else: + farfrrs = None + pdf.savefig(_plot_roc(frrs_eval, colors, args.legends, args.title[1] if args.title is not None else "ROC for evaluation set", args.legend_font_size, args.legend_position, farfrrs, min_far=args.min_far_value), bbox_inches='tight') + del frrs_eval + pdf.close() + except RuntimeError as e: + raise RuntimeError("During plotting of ROC curves, the following exception occured:\n%s" % e) + + if args.det: + logger.info("Computing DET curves on the development " + ("and on the evaluation set" if args.eval_files else "set")) + dets_dev = [bob.measure.det(scores[0], scores[1], 1000) for scores in scores_dev] + if args.eval_files: + dets_eval = [bob.measure.det(scores[0], scores[1], 1000) for scores in scores_eval] + + logger.info("Plotting DET curves to file '%s'", args.det) + try: + # create a multi-page PDF for the DET curve + pdf = PdfPages(args.det) + # create a separate figure for dev and eval + pdf.savefig(_plot_det(dets_dev, colors, args.legends, args.title[0] if args.title is not None else "DET for development set", args.legend_font_size, args.legend_position), bbox_inches='tight') + del dets_dev + if args.eval_files: + pdf.savefig(_plot_det(dets_eval, colors, args.legends, args.title[1] if args.title is not None else "DET for evaluation set", args.legend_font_size, args.legend_position), bbox_inches='tight') + del dets_eval + pdf.close() + except RuntimeError as e: + raise RuntimeError("During plotting of DET curves, the following exception occured:\n%s" % e) + + + if args.epc: + logger.info("Plotting EPC curves to file '%s'", args.epc) + + if not args.eval_files: + raise ValueError("To plot the EPC curve the evaluation scores are necessary. Please, set it with the --eval-files option.") + + try: + # create a multi-page PDF for the EPC curve + pdf = PdfPages(args.epc) + pdf.savefig(_plot_epc(scores_dev, scores_eval, colors, args.legends, args.title[0] if args.title is not None else "" , args.legend_font_size, args.legend_position), bbox_inches='tight') + pdf.close() + except RuntimeError as e: + raise RuntimeError("During plotting of EPC curves, the following exception occured:\n%s" % e) + + + + if args.cmc or args.rr or args.dir: + logger.info("Loading CMC data on the development " + ("and on the evaluation set" if args.eval_files else "set")) + cmcs_dev = [score.cmc(os.path.join(args.directory, f)) for f in args.dev_files] + if args.eval_files: + cmcs_eval = [score.cmc(os.path.join(args.directory, f)) for f in args.eval_files] + + if args.cmc: + logger.info("Plotting CMC curves to file '%s'", args.cmc) + try: + # create a multi-page PDF for the CMC curve + pdf = PdfPages(args.cmc) + # create a separate figure for dev and eval + pdf.savefig(_plot_cmc(cmcs_dev, colors, args.legends, args.title[0] if args.title is not None else "CMC curve for development set", args.legend_font_size, args.legend_position), bbox_inches='tight') + if args.eval_files: + pdf.savefig(_plot_cmc(cmcs_eval, colors, args.legends, args.title[1] if args.title is not None else "CMC curve for evaluation set", args.legend_font_size, args.legend_position), bbox_inches='tight') + pdf.close() + except RuntimeError as e: + raise RuntimeError("During plotting of CMC curves, the following exception occured:\n%s\nUsually this happens when the label contains characters that LaTeX cannot parse." % e) + + if args.rr: + logger.info("Computing recognition rate on the development " + ("and on the evaluation set" if args.eval_files else "set")) + for i in range(len(cmcs_dev)): + rr = bob.measure.recognition_rate(cmcs_dev[i], args.thresholds[i]) + print("The Recognition Rate of the development set of '%s' is %2.3f%%" % (args.legends[i], rr * 100.)) + if args.eval_files: + rr = bob.measure.recognition_rate(cmcs_eval[i], args.thresholds[i]) + print("The Recognition Rate of the development set of '%s' is %2.3f%%" % (args.legends[i], rr * 100.)) + + if args.dir: + # compute false alarm values to evaluate + min_far = int(math.floor(math.log(args.min_far_value, 10))) + fars = [math.pow(10., i * 0.25) for i in range(min_far * 4, 0)] + [1.] + logger.info("Plotting DIR curves to file '%s'", args.dir) + try: + # create a multi-page PDF for the DIR curve + pdf = PdfPages(args.dir) + # create a separate figure for dev and eval + pdf.savefig(_plot_dir(cmcs_dev, fars, args.rank, colors, args.legends, args.title[0] if args.title is not None else "DIR curve for development set", args.legend_font_size, args.legend_position), bbox_inches='tight') + if args.eval_files: + pdf.savefig(_plot_dir(cmcs_eval, fars, args.rank, colors, args.legends, args.title[1] if args.title is not None else "DIR curve for evaluation set", args.legend_font_size, args.legend_position), bbox_inches='tight') + pdf.close() + except RuntimeError as e: + raise RuntimeError("During plotting of DIR curves, the following exception occured:\n%s" % e) diff --git a/bob/bio/base/script/fuse_scores.py b/bob/bio/base/script/fuse_scores.py index 29152981af9d3e823da7c04ca0a3474b0f8ef1d1..220791dc0086d83c4190c20d6fd06e07c7b0054f 100755 --- a/bob/bio/base/script/fuse_scores.py +++ b/bob/bio/base/script/fuse_scores.py @@ -17,6 +17,7 @@ import bob, os, sys import bob.learn.linear import bob.core +from .. import score logger = bob.core.log.setup("bob.bio.base") def parse_command_line(command_line_options): @@ -66,7 +67,7 @@ def main(command_line_options = None): for i in range(n_systems): logger.info("Loading development set score file '%s'", args.dev_files[i]) # pythonic way: create inline dictionary "{...}", index with desired value "[...]", execute function "(...)" - data.append({'4column' : bob.measure.load.split_four_column, '5column' : bob.measure.load.split_five_column}[args.parser](args.dev_files[i])) + data.append({'4column' : score.split_four_column, '5column' : score.split_five_column}[args.parser](args.dev_files[i])) import numpy trainer = bob.learn.linear.CGLogRegTrainer(0.5, args.convergence_threshold, args.max_iterations, mean_std_norm=not args.no_whitening) @@ -78,7 +79,7 @@ def main(command_line_options = None): gen_data_dev = [] for i in range(n_systems): logger.info("Loading development set score file '%s'", args.dev_files[i]) - gen_data_dev.append({'4column' : bob.measure.load.four_column, '5column' : bob.measure.load.five_column}[args.parser](args.dev_files[i])) + gen_data_dev.append({'4column' : score.four_column, '5column' : score.five_column}[args.parser](args.dev_files[i])) logger.info("Writing fused development set score file '%s'", args.fused_dev_file) outf = open(args.fused_dev_file, 'w') @@ -99,7 +100,7 @@ def main(command_line_options = None): gen_data_eval = [] for i in range(n_systems): logger.info("Loading evaluation set score file '%s'", args.eval_files[i]) - gen_data_eval.append({'4column' : bob.measure.load.four_column, '5column' : bob.measure.load.five_column}[args.parser](args.eval_files[i])) + gen_data_eval.append({'4column' : score.four_column, '5column' : score.five_column}[args.parser](args.eval_files[i])) logger.info("Writing fused evaluation set score file '%s'", args.fused_eval_file) outf = open(args.fused_eval_file, 'w') diff --git a/bob/bio/base/test/data/dev-4col.tar.gz b/bob/bio/base/test/data/dev-4col.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a903eaa18e8f219b24a59933ef43987cb5f9fe76 Binary files /dev/null and b/bob/bio/base/test/data/dev-4col.tar.gz differ diff --git a/bob/bio/base/test/data/dev-4col.txt b/bob/bio/base/test/data/dev-4col.txt new file mode 100644 index 0000000000000000000000000000000000000000..be5f2d89447b7c47ff2a99c26fea82d3b4aeb8a8 --- /dev/null +++ b/bob/bio/base/test/data/dev-4col.txt @@ -0,0 +1,910 @@ +f_1001 f_1001 x 0.006299 +f_1001 f_1001 x 0.111554 +f_1001 f_1001 x -0.092548 +f_1001 f_1001 x -0.030429 +f_1001 f_1001 x -0.004657 +f_1001 f_1003 x -0.070376 +f_1001 f_1003 x -0.076431 +f_1001 f_1003 x -0.09103 +f_1001 f_1003 x -0.119019 +f_1001 f_1003 x -0.119581 +f_1002 f_1002 x -0.076412 +f_1002 f_1002 x -0.007193 +f_1002 f_1002 x -0.068236 +f_1002 f_1002 x 0.001462 +f_1002 f_1002 x -0.089528 +f_1002 f_1004 x -0.177674 +f_1002 f_1004 x -0.116451 +f_1002 f_1004 x -0.105341 +f_1002 f_1004 x -0.15466 +f_1002 f_1004 x -0.18616 +f_1003 f_1003 x 0.259138 +f_1003 f_1003 x 0.332629 +f_1003 f_1003 x 0.311423 +f_1003 f_1003 x 0.162215 +f_1003 f_1003 x 0.048613 +f_1003 f_1005 x -0.074399 +f_1003 f_1005 x -0.04628 +f_1003 f_1005 x -0.014418 +f_1003 f_1005 x 0.00478 +f_1003 f_1005 x -0.016143 +f_1004 f_1004 x 0.133522 +f_1004 f_1004 x 0.233416 +f_1004 f_1004 x 0.157029 +f_1004 f_1004 x 0.163154 +f_1004 f_1004 x 0.188569 +f_1004 f_1006 x -0.111788 +f_1004 f_1006 x -0.146505 +f_1004 f_1006 x -0.085332 +f_1004 f_1006 x -0.143158 +f_1004 f_1006 x -0.126225 +f_1005 f_1005 x 0.102271 +f_1005 f_1005 x 0.045251 +f_1005 f_1005 x 0.044341 +f_1005 f_1005 x 0.03692 +f_1005 f_1005 x -0.013536 +f_1005 f_1007 x 0.019496 +f_1005 f_1007 x -0.00295 +f_1005 f_1007 x -0.027841 +f_1005 f_1007 x -0.038533 +f_1005 f_1007 x -0.130486 +f_1006 f_1006 x 0.155776 +f_1006 f_1006 x 0.030909 +f_1006 f_1006 x 0.245848 +f_1006 f_1006 x 0.450645 +f_1006 f_1006 x 0.19262 +f_1006 f_1008 x -0.09691 +f_1006 f_1008 x -0.109712 +f_1006 f_1008 x -0.070605 +f_1006 f_1008 x -0.066152 +f_1006 f_1008 x -0.037858 +f_1007 f_1007 x 0.293177 +f_1007 f_1007 x 0.271007 +f_1007 f_1007 x 0.318237 +f_1007 f_1007 x 0.186197 +f_1007 f_1007 x 0.352784 +f_1007 f_1009 x -0.050168 +f_1007 f_1009 x 0.024759 +f_1007 f_1009 x -0.066628 +f_1007 f_1009 x -0.04056 +f_1007 f_1009 x 0.010592 +f_1008 f_1008 x 0.09707 +f_1008 f_1008 x -0.022928 +f_1008 f_1008 x 0.028861 +f_1008 f_1008 x 0.04206 +f_1008 f_1008 x 0.066096 +f_1008 f_1010 x -0.063427 +f_1008 f_1010 x 0.03159 +f_1008 f_1010 x -0.049853 +f_1008 f_1010 x -0.035822 +f_1008 f_1010 x -0.075959 +f_1009 f_1009 x 0.077973 +f_1009 f_1009 x 0.138974 +f_1009 f_1009 x 0.078081 +f_1009 f_1009 x 0.098706 +f_1009 f_1009 x -0.061095 +f_1009 f_1011 x -0.145006 +f_1009 f_1011 x -0.137257 +f_1009 f_1011 x -0.142997 +f_1009 f_1011 x -0.143305 +f_1009 f_1011 x -0.131891 +f_1010 f_1010 x 0.07374 +f_1010 f_1010 x 0.12733 +f_1010 f_1010 x 0.071941 +f_1010 f_1010 x 0.093608 +f_1010 f_1010 x 0.132198 +f_1010 f_1012 x 0.102712 +f_1010 f_1012 x -0.044807 +f_1010 f_1012 x -0.00116 +f_1010 f_1012 x 0.030686 +f_1010 f_1012 x -0.036943 +f_1011 f_1011 x 0.232048 +f_1011 f_1011 x 0.22864 +f_1011 f_1011 x 0.132145 +f_1011 f_1011 x 0.165999 +f_1011 f_1011 x 0.120414 +f_1011 f_1013 x -0.12074 +f_1011 f_1013 x -0.117955 +f_1011 f_1013 x -0.076039 +f_1011 f_1013 x -0.07393 +f_1011 f_1013 x -0.103342 +f_1012 f_1001 x -0.020321 +f_1012 f_1001 x -0.05211 +f_1012 f_1001 x -0.056951 +f_1012 f_1001 x 0.013234 +f_1012 f_1001 x -0.014755 +f_1012 f_1012 x -0.020073 +f_1012 f_1012 x 0.051658 +f_1012 f_1012 x 0.032461 +f_1012 f_1012 x 0.067917 +f_1012 f_1012 x 0.052605 +f_1013 f_1002 x -0.105477 +f_1013 f_1002 x -0.110275 +f_1013 f_1002 x -0.118202 +f_1013 f_1002 x -0.041612 +f_1013 f_1002 x -0.133065 +f_1013 f_1013 x 0.003664 +f_1013 f_1013 x 0.025006 +f_1013 f_1013 x 0.008643 +f_1013 f_1013 x 0.027281 +f_1013 f_1013 x 0.028362 +m_1027 m_1027 x 0.286687 +m_1027 m_1027 x 0.183224 +m_1027 m_1027 x 0.321388 +m_1027 m_1027 x 0.42079 +m_1027 m_1027 x 0.53976 +m_1027 m_1029 x -0.08594 +m_1027 m_1029 x -0.121272 +m_1027 m_1029 x -0.113022 +m_1027 m_1029 x -0.160544 +m_1027 m_1029 x -0.090424 +m_1028 m_1028 x 0.017651 +m_1028 m_1028 x 0.150004 +m_1028 m_1028 x 0.159424 +m_1028 m_1028 x 0.052019 +m_1028 m_1028 x 0.127836 +m_1028 m_1030 x -0.141315 +m_1028 m_1030 x -0.029844 +m_1028 m_1030 x -0.022167 +m_1028 m_1030 x -0.071379 +m_1028 m_1030 x -0.099675 +m_1029 m_1029 x -0.003534 +m_1029 m_1029 x 0.024651 +m_1029 m_1029 x 0.060505 +m_1029 m_1029 x 0.12037 +m_1029 m_1029 x -0.03431 +m_1029 m_1031 x -0.03181 +m_1029 m_1031 x 0.003197 +m_1029 m_1031 x -0.034498 +m_1029 m_1031 x -0.050882 +m_1029 m_1031 x -0.00274 +m_1030 m_1030 x 0.197724 +m_1030 m_1030 x 0.207926 +m_1030 m_1030 x 0.144697 +m_1030 m_1030 x 0.298164 +m_1030 m_1030 x 0.180303 +m_1030 m_1032 x -0.100375 +m_1030 m_1032 x -0.089028 +m_1030 m_1032 x -0.096304 +m_1030 m_1032 x -0.125789 +m_1030 m_1032 x -0.119192 +m_1031 m_1031 x 0.178925 +m_1031 m_1031 x 0.135697 +m_1031 m_1031 x 0.190606 +m_1031 m_1031 x 0.268289 +m_1031 m_1031 x 0.114208 +m_1031 m_1033 x -0.065958 +m_1031 m_1033 x -0.042427 +m_1031 m_1033 x -0.115761 +m_1031 m_1033 x -0.077916 +m_1031 m_1033 x -0.179634 +m_1032 m_1032 x 0.082708 +m_1032 m_1032 x 0.078839 +m_1032 m_1032 x 0.031509 +m_1032 m_1032 x 0.08322 +m_1032 m_1032 x 0.013146 +m_1032 m_1034 x -0.094497 +m_1032 m_1034 x -0.097829 +m_1032 m_1034 x -0.041958 +m_1032 m_1034 x -0.112755 +m_1032 m_1034 x -0.087314 +m_1033 m_1033 x 0.232628 +m_1033 m_1033 x 0.430066 +m_1033 m_1033 x 0.252453 +m_1033 m_1033 x 0.231405 +m_1033 m_1033 x 0.032603 +m_1033 m_1035 x -0.142229 +m_1033 m_1035 x -0.175921 +m_1033 m_1035 x -0.200045 +m_1033 m_1035 x -0.195439 +m_1033 m_1035 x -0.166693 +m_1034 m_1034 x 0.179047 +m_1034 m_1034 x 0.137423 +m_1034 m_1034 x 0.327826 +m_1034 m_1034 x 0.207818 +m_1034 m_1034 x 0.070218 +m_1034 m_1036 x -0.042577 +m_1034 m_1036 x -0.107757 +m_1034 m_1036 x -0.086648 +m_1034 m_1036 x -0.178798 +m_1034 m_1036 x -0.11879 +m_1035 m_1035 x 0.248223 +m_1035 m_1035 x 0.075324 +m_1035 m_1035 x 0.017175 +m_1035 m_1035 x 0.18272 +m_1035 m_1035 x 0.218537 +m_1035 m_1037 x -0.055362 +m_1035 m_1037 x 0.002305 +m_1035 m_1037 x -0.041379 +m_1035 m_1037 x -0.058087 +m_1035 m_1037 x -0.027096 +m_1036 m_1036 x 0.227317 +m_1036 m_1036 x 0.376308 +m_1036 m_1036 x 0.152254 +m_1036 m_1036 x 0.139492 +m_1036 m_1036 x 0.013966 +m_1036 m_1038 x -0.102269 +m_1036 m_1038 x -0.192218 +m_1036 m_1038 x -0.112356 +m_1036 m_1038 x -0.101645 +m_1036 m_1038 x -0.07972 +m_1037 m_1037 x 0.038043 +m_1037 m_1037 x 0.11105 +m_1037 m_1037 x 0.019263 +m_1037 m_1037 x 0.16381 +m_1037 m_1037 x 0.024562 +m_1037 m_1039 x -0.106496 +m_1037 m_1039 x -0.100107 +m_1037 m_1039 x -0.081944 +m_1037 m_1039 x -0.117425 +m_1037 m_1039 x -0.084941 +m_1038 m_1027 x -0.123203 +m_1038 m_1027 x -0.207728 +m_1038 m_1027 x -0.1382 +m_1038 m_1027 x -0.121587 +m_1038 m_1027 x -0.150723 +m_1038 m_1038 x 0.213872 +m_1038 m_1038 x 0.097973 +m_1038 m_1038 x 0.321722 +m_1038 m_1038 x 0.18745 +m_1038 m_1038 x 0.355983 +m_1039 m_1028 x -0.074966 +m_1039 m_1028 x -0.03744 +m_1039 m_1028 x -0.04915 +m_1039 m_1028 x -0.053868 +m_1039 m_1028 x -0.034545 +m_1039 m_1039 x 0.14851 +m_1039 m_1039 x 0.172884 +m_1039 m_1039 x 0.291446 +m_1039 m_1039 x 0.106946 +m_1039 m_1039 x 0.059841 +f_1001 f_1001 x 0.033419 +f_1001 f_1001 x 0.13594 +f_1001 f_1001 x 0.082771 +f_1001 f_1001 x 0.046389 +f_1001 f_1001 x 0.058532 +f_1001 f_1004 x -0.092433 +f_1001 f_1004 x -0.09177 +f_1001 f_1004 x -0.132993 +f_1001 f_1004 x -0.116056 +f_1001 f_1004 x -0.084283 +f_1002 f_1002 x 0.108519 +f_1002 f_1002 x 0.087181 +f_1002 f_1002 x 0.064553 +f_1002 f_1002 x 0.080549 +f_1002 f_1002 x 0.1712 +f_1002 f_1005 x -0.076835 +f_1002 f_1005 x 0.016473 +f_1002 f_1005 x -0.040655 +f_1002 f_1005 x -0.06199 +f_1002 f_1005 x -0.078235 +f_1003 f_1003 x 0.134625 +f_1003 f_1003 x 0.172739 +f_1003 f_1003 x 0.228282 +f_1003 f_1003 x 0.253931 +f_1003 f_1003 x 0.238589 +f_1003 f_1006 x -0.09667 +f_1003 f_1006 x -0.034176 +f_1003 f_1006 x -0.1011 +f_1003 f_1006 x -0.095959 +f_1003 f_1006 x -0.158999 +f_1004 f_1004 x 0.097513 +f_1004 f_1004 x 0.187646 +f_1004 f_1004 x 0.085344 +f_1004 f_1004 x 0.114839 +f_1004 f_1004 x 0.006801 +f_1004 f_1007 x -0.156948 +f_1004 f_1007 x -0.165101 +f_1004 f_1007 x -0.127331 +f_1004 f_1007 x -0.153506 +f_1004 f_1007 x -0.195711 +f_1005 f_1005 x 0.01518 +f_1005 f_1005 x -7.5e-05 +f_1005 f_1005 x 0.01684 +f_1005 f_1005 x -0.005073 +f_1005 f_1005 x 0.032382 +f_1005 f_1008 x -0.026999 +f_1005 f_1008 x -0.029375 +f_1005 f_1008 x -0.028278 +f_1005 f_1008 x -0.048425 +f_1005 f_1008 x -0.135783 +f_1006 f_1006 x 0.182481 +f_1006 f_1006 x 0.202499 +f_1006 f_1006 x 0.239218 +f_1006 f_1006 x 0.406041 +f_1006 f_1006 x 0.296635 +f_1006 f_1009 x -0.068945 +f_1006 f_1009 x -0.057447 +f_1006 f_1009 x -0.083765 +f_1006 f_1009 x -0.037169 +f_1006 f_1009 x -0.06683 +f_1007 f_1007 x 0.15405 +f_1007 f_1007 x 0.305664 +f_1007 f_1007 x 0.188087 +f_1007 f_1007 x 0.170585 +f_1007 f_1007 x 0.109559 +f_1007 f_1010 x 0.068076 +f_1007 f_1010 x 0.081827 +f_1007 f_1010 x 0.014147 +f_1007 f_1010 x 0.014425 +f_1007 f_1010 x 0.045884 +f_1008 f_1008 x 0.139573 +f_1008 f_1008 x 0.094594 +f_1008 f_1008 x 0.058536 +f_1008 f_1008 x 0.021469 +f_1008 f_1008 x -0.026828 +f_1008 f_1011 x -0.046452 +f_1008 f_1011 x -0.114524 +f_1008 f_1011 x -0.128179 +f_1008 f_1011 x -0.112471 +f_1008 f_1011 x -0.083361 +f_1009 f_1009 x 0.163705 +f_1009 f_1009 x 0.07234 +f_1009 f_1009 x 0.126191 +f_1009 f_1009 x 0.135067 +f_1009 f_1009 x 0.118532 +f_1009 f_1012 x -0.064793 +f_1009 f_1012 x -0.095379 +f_1009 f_1012 x -0.040691 +f_1009 f_1012 x -0.070911 +f_1009 f_1012 x -0.140827 +f_1010 f_1010 x 0.132978 +f_1010 f_1010 x 0.041378 +f_1010 f_1010 x 0.04313 +f_1010 f_1010 x 0.092458 +f_1010 f_1010 x 0.096904 +f_1010 f_1013 x -0.097114 +f_1010 f_1013 x -0.052594 +f_1010 f_1013 x -0.02576 +f_1010 f_1013 x -0.002308 +f_1010 f_1013 x -0.036247 +f_1011 f_1001 x -0.109128 +f_1011 f_1001 x -0.1285 +f_1011 f_1001 x -0.133866 +f_1011 f_1001 x -0.101178 +f_1011 f_1001 x -0.175889 +f_1011 f_1011 x 0.069141 +f_1011 f_1011 x 0.177819 +f_1011 f_1011 x 0.252736 +f_1011 f_1011 x 0.124971 +f_1011 f_1011 x -0.037371 +f_1012 f_1002 x -0.09968 +f_1012 f_1002 x -0.089508 +f_1012 f_1002 x -0.169929 +f_1012 f_1002 x -0.132806 +f_1012 f_1002 x -0.089144 +f_1012 f_1012 x 0.073806 +f_1012 f_1012 x 0.2798 +f_1012 f_1012 x 0.246575 +f_1012 f_1012 x 0.349386 +f_1012 f_1012 x 0.258482 +f_1013 f_1003 x -0.112431 +f_1013 f_1003 x -0.129464 +f_1013 f_1003 x -0.109285 +f_1013 f_1003 x -0.145877 +f_1013 f_1003 x -0.168941 +f_1013 f_1013 x 0.013857 +f_1013 f_1013 x 0.039728 +f_1013 f_1013 x 0.031497 +f_1013 f_1013 x 0.049286 +f_1013 f_1013 x 0.096255 +m_1027 m_1027 x 0.060615 +m_1027 m_1027 x 0.082342 +m_1027 m_1027 x 0.043655 +m_1027 m_1027 x -0.099656 +m_1027 m_1027 x 0.050683 +m_1027 m_1030 x -0.134642 +m_1027 m_1030 x -0.261239 +m_1027 m_1030 x -0.194439 +m_1027 m_1030 x -0.220323 +m_1027 m_1030 x -0.256019 +m_1028 m_1028 x 0.068556 +m_1028 m_1028 x 0.091921 +m_1028 m_1028 x 0.031302 +m_1028 m_1028 x 0.109156 +m_1028 m_1028 x 0.051723 +m_1028 m_1031 x -0.049995 +m_1028 m_1031 x -0.028761 +m_1028 m_1031 x -0.059723 +m_1028 m_1031 x -0.031208 +m_1028 m_1031 x -0.048432 +m_1029 m_1029 x 0.017661 +m_1029 m_1029 x 0.028584 +m_1029 m_1029 x 0.079403 +m_1029 m_1029 x 0.155884 +m_1029 m_1029 x 0.160435 +m_1029 m_1032 x -0.109034 +m_1029 m_1032 x -0.082531 +m_1029 m_1032 x -0.036228 +m_1029 m_1032 x -0.068302 +m_1029 m_1032 x -0.118334 +m_1030 m_1030 x 0.064921 +m_1030 m_1030 x 0.175909 +m_1030 m_1030 x 0.124186 +m_1030 m_1030 x 0.167682 +m_1030 m_1030 x 0.098036 +m_1030 m_1033 x -0.045998 +m_1030 m_1033 x -0.050858 +m_1030 m_1033 x -0.0977 +m_1030 m_1033 x -0.024854 +m_1030 m_1033 x 0.005692 +m_1031 m_1031 x 0.108419 +m_1031 m_1031 x 0.249197 +m_1031 m_1031 x 0.170237 +m_1031 m_1031 x 0.183539 +m_1031 m_1031 x 0.174438 +m_1031 m_1034 x -0.016035 +m_1031 m_1034 x -0.145965 +m_1031 m_1034 x -0.103444 +m_1031 m_1034 x -0.141519 +m_1031 m_1034 x -0.158891 +m_1032 m_1032 x 0.155962 +m_1032 m_1032 x 0.188311 +m_1032 m_1032 x 0.084141 +m_1032 m_1032 x 0.100994 +m_1032 m_1032 x 0.146386 +m_1032 m_1035 x -0.074712 +m_1032 m_1035 x -0.064903 +m_1032 m_1035 x -0.101804 +m_1032 m_1035 x -0.032691 +m_1032 m_1035 x -0.114303 +m_1033 m_1033 x 0.240143 +m_1033 m_1033 x 0.232077 +m_1033 m_1033 x 0.113915 +m_1033 m_1033 x 0.191992 +m_1033 m_1033 x 0.218409 +m_1033 m_1036 x -0.050754 +m_1033 m_1036 x -0.136127 +m_1033 m_1036 x -0.064983 +m_1033 m_1036 x -0.105041 +m_1033 m_1036 x -0.08994 +m_1034 m_1034 x 0.098361 +m_1034 m_1034 x 0.124989 +m_1034 m_1034 x 0.096239 +m_1034 m_1034 x 0.102784 +m_1034 m_1034 x 0.069988 +m_1034 m_1037 x -0.154057 +m_1034 m_1037 x -0.097786 +m_1034 m_1037 x -0.098328 +m_1034 m_1037 x -0.162156 +m_1034 m_1037 x -0.136505 +m_1035 m_1035 x 0.378851 +m_1035 m_1035 x 0.487314 +m_1035 m_1035 x 0.208127 +m_1035 m_1035 x 0.076721 +m_1035 m_1035 x 0.345281 +m_1035 m_1038 x -0.191282 +m_1035 m_1038 x -0.051842 +m_1035 m_1038 x -0.141957 +m_1035 m_1038 x -0.146796 +m_1035 m_1038 x -0.161529 +m_1036 m_1036 x -0.028397 +m_1036 m_1036 x 0.10841 +m_1036 m_1036 x 0.227747 +m_1036 m_1036 x 0.1182 +m_1036 m_1036 x 0.213726 +m_1036 m_1039 x -0.159576 +m_1036 m_1039 x -0.094982 +m_1036 m_1039 x -0.223145 +m_1036 m_1039 x -0.169588 +m_1036 m_1039 x -0.131725 +m_1037 m_1027 x -0.086815 +m_1037 m_1027 x -0.142433 +m_1037 m_1027 x -0.094744 +m_1037 m_1027 x -0.139911 +m_1037 m_1027 x -0.110981 +m_1037 m_1037 x 0.188964 +m_1037 m_1037 x 0.191109 +m_1037 m_1037 x 0.177809 +m_1037 m_1037 x 0.342173 +m_1037 m_1037 x 0.320537 +m_1038 m_1028 x -0.022658 +m_1038 m_1028 x -0.121851 +m_1038 m_1028 x -0.094836 +m_1038 m_1028 x -0.092378 +m_1038 m_1028 x -0.128918 +m_1038 m_1038 x 0.088761 +m_1038 m_1038 x 0.23967 +m_1038 m_1038 x 0.2144 +m_1038 m_1038 x 0.225245 +m_1038 m_1038 x 0.166043 +m_1039 m_1029 x -0.094188 +m_1039 m_1029 x -0.137532 +m_1039 m_1029 x -0.106247 +m_1039 m_1029 x -0.051079 +m_1039 m_1029 x -0.09995 +m_1039 m_1039 x 0.047286 +m_1039 m_1039 x 0.066872 +m_1039 m_1039 x 0.084683 +m_1039 m_1039 x 0.14965 +m_1039 m_1039 x 0.061803 +f_1001 f_1001 x 0.092146 +f_1001 f_1001 x 0.069535 +f_1001 f_1001 x 0.130482 +f_1001 f_1001 x 0.121077 +f_1001 f_1001 x 0.046827 +f_1001 f_1005 x -0.07389 +f_1001 f_1005 x -0.005571 +f_1001 f_1005 x -0.038638 +f_1001 f_1005 x -0.069725 +f_1001 f_1005 x -0.106528 +f_1002 f_1002 x 0.152725 +f_1002 f_1002 x 0.068492 +f_1002 f_1002 x 0.021185 +f_1002 f_1002 x 0.100351 +f_1002 f_1002 x 0.110254 +f_1002 f_1006 x -0.045543 +f_1002 f_1006 x -0.103691 +f_1002 f_1006 x -0.109144 +f_1002 f_1006 x -0.136591 +f_1002 f_1006 x -0.066464 +f_1003 f_1003 x 0.250429 +f_1003 f_1003 x 0.216766 +f_1003 f_1003 x 0.369219 +f_1003 f_1003 x 0.088713 +f_1003 f_1003 x 0.300226 +f_1003 f_1007 x -0.076819 +f_1003 f_1007 x -0.149137 +f_1003 f_1007 x -0.135019 +f_1003 f_1007 x -0.163912 +f_1003 f_1007 x -0.095181 +f_1004 f_1004 x 0.121271 +f_1004 f_1004 x 0.040588 +f_1004 f_1004 x -0.055486 +f_1004 f_1004 x 0.037581 +f_1004 f_1004 x -0.051495 +f_1004 f_1008 x -0.058328 +f_1004 f_1008 x -0.080856 +f_1004 f_1008 x -0.098234 +f_1004 f_1008 x -0.074142 +f_1004 f_1008 x -0.105869 +f_1005 f_1005 x 0.055989 +f_1005 f_1005 x 0.002048 +f_1005 f_1005 x 0.065929 +f_1005 f_1005 x 0.075466 +f_1005 f_1005 x 0.063656 +f_1005 f_1009 x -0.015425 +f_1005 f_1009 x -0.030571 +f_1005 f_1009 x -0.051191 +f_1005 f_1009 x -0.011377 +f_1005 f_1009 x -0.029323 +f_1006 f_1006 x 0.114515 +f_1006 f_1006 x 0.193478 +f_1006 f_1006 x 0.263637 +f_1006 f_1006 x 0.124408 +f_1006 f_1006 x 0.253012 +f_1006 f_1010 x -0.045272 +f_1006 f_1010 x -0.008281 +f_1006 f_1010 x -0.098975 +f_1006 f_1010 x -0.052164 +f_1006 f_1010 x -0.038489 +f_1007 f_1007 x 0.416937 +f_1007 f_1007 x 0.152148 +f_1007 f_1007 x 0.260329 +f_1007 f_1007 x 0.302488 +f_1007 f_1007 x 0.197565 +f_1007 f_1011 x -0.025394 +f_1007 f_1011 x -0.03248 +f_1007 f_1011 x -0.018316 +f_1007 f_1011 x 0.002981 +f_1007 f_1011 x -0.084619 +f_1008 f_1008 x 0.21788 +f_1008 f_1008 x 0.135293 +f_1008 f_1008 x 0.075077 +f_1008 f_1008 x 0.07734 +f_1008 f_1008 x 0.005587 +f_1008 f_1012 x -0.155008 +f_1008 f_1012 x -0.146633 +f_1008 f_1012 x -0.091813 +f_1008 f_1012 x -0.134748 +f_1008 f_1012 x -0.112009 +f_1009 f_1009 x 0.07703 +f_1009 f_1009 x 0.20282 +f_1009 f_1009 x 0.047498 +f_1009 f_1009 x 0.14907 +f_1009 f_1009 x 0.065152 +f_1009 f_1013 x -0.040804 +f_1009 f_1013 x -0.108543 +f_1009 f_1013 x -0.069024 +f_1009 f_1013 x -0.093558 +f_1009 f_1013 x -0.104821 +f_1010 f_1001 x 0.030117 +f_1010 f_1001 x -0.001707 +f_1010 f_1001 x 0.023293 +f_1010 f_1001 x 0.044433 +f_1010 f_1001 x 0.036691 +f_1010 f_1010 x 0.090399 +f_1010 f_1010 x 0.287217 +f_1010 f_1010 x 0.17436 +f_1010 f_1010 x 0.072507 +f_1010 f_1010 x 0.169799 +f_1011 f_1002 x -0.098069 +f_1011 f_1002 x -0.059601 +f_1011 f_1002 x -0.116737 +f_1011 f_1002 x -0.091612 +f_1011 f_1002 x -0.124484 +f_1011 f_1011 x 0.061337 +f_1011 f_1011 x 0.078452 +f_1011 f_1011 x 0.053488 +f_1011 f_1011 x 0.274413 +f_1011 f_1011 x 0.025676 +f_1012 f_1003 x -0.172277 +f_1012 f_1003 x -0.139654 +f_1012 f_1003 x -0.110438 +f_1012 f_1003 x -0.147711 +f_1012 f_1003 x -0.144899 +f_1012 f_1012 x -0.008046 +f_1012 f_1012 x 0.01118 +f_1012 f_1012 x 0.069386 +f_1012 f_1012 x 0.018678 +f_1012 f_1012 x 0.090871 +f_1013 f_1004 x -0.139999 +f_1013 f_1004 x -0.146055 +f_1013 f_1004 x -0.080982 +f_1013 f_1004 x -0.11122 +f_1013 f_1004 x -0.048738 +f_1013 f_1013 x 0.08644 +f_1013 f_1013 x 0.031428 +f_1013 f_1013 x 0.110492 +f_1013 f_1013 x 0.080487 +f_1013 f_1013 x 0.129129 +m_1027 m_1027 x -0.030796 +m_1027 m_1027 x 0.166674 +m_1027 m_1027 x -0.054503 +m_1027 m_1027 x 0.216297 +m_1027 m_1027 x 0.036048 +m_1027 m_1031 x -0.068606 +m_1027 m_1031 x -0.087531 +m_1027 m_1031 x -0.079769 +m_1027 m_1031 x -0.105363 +m_1027 m_1031 x -0.017589 +m_1028 m_1028 x 0.057595 +m_1028 m_1028 x 0.12494 +m_1028 m_1028 x 0.285578 +m_1028 m_1028 x 0.068244 +m_1028 m_1028 x 0.027044 +m_1028 m_1032 x -0.08819 +m_1028 m_1032 x -0.014659 +m_1028 m_1032 x -0.060915 +m_1028 m_1032 x -0.058342 +m_1028 m_1032 x 0.002364 +m_1029 m_1029 x 0.007404 +m_1029 m_1029 x -0.04252 +m_1029 m_1029 x -0.032869 +m_1029 m_1029 x 0.029775 +m_1029 m_1029 x -0.051259 +m_1029 m_1033 x -0.158181 +m_1029 m_1033 x -0.121331 +m_1029 m_1033 x -0.144152 +m_1029 m_1033 x -0.156712 +m_1029 m_1033 x -0.177725 +m_1030 m_1030 x 0.056945 +m_1030 m_1030 x 0.317025 +m_1030 m_1030 x 0.325579 +m_1030 m_1030 x 0.284201 +m_1030 m_1030 x 0.230508 +m_1030 m_1034 x -0.022487 +m_1030 m_1034 x -0.048232 +m_1030 m_1034 x -0.145175 +m_1030 m_1034 x -0.123378 +m_1030 m_1034 x -0.073831 +m_1031 m_1031 x 0.193519 +m_1031 m_1031 x 0.175608 +m_1031 m_1031 x 0.107447 +m_1031 m_1031 x 0.199848 +m_1031 m_1031 x 0.168314 +m_1031 m_1035 x -0.020661 +m_1031 m_1035 x -0.065903 +m_1031 m_1035 x -0.125195 +m_1031 m_1035 x -0.110455 +m_1031 m_1035 x -0.094515 +m_1032 m_1032 x 0.195781 +m_1032 m_1032 x 0.096999 +m_1032 m_1032 x -0.008268 +m_1032 m_1032 x 0.069079 +m_1032 m_1032 x 0.044985 +m_1032 m_1036 x -0.076835 +m_1032 m_1036 x -0.088222 +m_1032 m_1036 x -0.120676 +m_1032 m_1036 x -0.142852 +m_1032 m_1036 x -0.086772 +m_1033 m_1033 x -0.029097 +m_1033 m_1033 x 0.061971 +m_1033 m_1033 x 0.019417 +m_1033 m_1033 x 0.037331 +m_1033 m_1033 x 0.127991 +m_1033 m_1037 x -0.175094 +m_1033 m_1037 x -0.150287 +m_1033 m_1037 x -0.220412 +m_1033 m_1037 x -0.172678 +m_1033 m_1037 x -0.169294 +m_1034 m_1034 x 0.149889 +m_1034 m_1034 x 0.066521 +m_1034 m_1034 x 0.101737 +m_1034 m_1034 x 0.100917 +m_1034 m_1034 x 0.085561 +m_1034 m_1038 x -0.124248 +m_1034 m_1038 x -0.038474 +m_1034 m_1038 x -0.068404 +m_1034 m_1038 x -0.058341 +m_1034 m_1038 x -0.115717 +m_1035 m_1035 x 0.213568 +m_1035 m_1035 x 0.029325 +m_1035 m_1035 x 0.194311 +m_1035 m_1035 x 0.249343 +m_1035 m_1035 x 0.093952 +m_1035 m_1039 x -0.090435 +m_1035 m_1039 x -0.153427 +m_1035 m_1039 x -0.083921 +m_1035 m_1039 x -0.070264 +m_1035 m_1039 x -0.057297 +m_1036 m_1027 x -0.115691 +m_1036 m_1027 x -0.059323 +m_1036 m_1027 x -0.186053 +m_1036 m_1027 x -0.175012 +m_1036 m_1027 x -0.166257 +m_1036 m_1036 x 0.063842 +m_1036 m_1036 x 0.154448 +m_1036 m_1036 x 0.389991 +m_1036 m_1036 x 0.316025 +m_1036 m_1036 x 0.30907 +m_1037 m_1028 x -0.075955 +m_1037 m_1028 x -0.080148 +m_1037 m_1028 x -0.021735 +m_1037 m_1028 x -0.056239 +m_1037 m_1028 x -0.026486 +m_1037 m_1037 x 0.103612 +m_1037 m_1037 x 0.259835 +m_1037 m_1037 x 0.243031 +m_1037 m_1037 x 0.118142 +m_1037 m_1037 x 0.164509 +m_1038 m_1029 x -0.041864 +m_1038 m_1029 x -0.003681 +m_1038 m_1029 x -0.0213 +m_1038 m_1029 x -0.003561 +m_1038 m_1029 x -0.048595 +m_1038 m_1038 x 0.182035 +m_1038 m_1038 x 0.121601 +m_1038 m_1038 x 0.231335 +m_1038 m_1038 x 0.2318 +m_1038 m_1038 x 0.378738 +m_1039 m_1030 x -0.186483 +m_1039 m_1030 x -0.153817 +m_1039 m_1030 x -0.164871 +m_1039 m_1030 x -0.099591 +m_1039 m_1030 x -0.204401 +m_1039 m_1039 x 0.095322 +m_1039 m_1039 x 0.072113 +m_1039 m_1039 x 0.139665 +m_1039 m_1039 x 0.132828 +m_1039 m_1039 x 0.169885 +f_1001 f_1002 x -0.079848 +f_1001 f_1002 x -0.138407 +f_1001 f_1002 x -0.05771 +f_1001 f_1002 x -0.101174 +f_1001 f_1002 x -0.084897 +f_1002 f_1003 x -0.073879 +f_1002 f_1003 x 0.04615 +f_1002 f_1003 x 0.075474 +f_1002 f_1003 x -0.012754 +f_1002 f_1003 x -0.006101 +f_1003 f_1004 x -0.033191 +f_1003 f_1004 x -0.070245 +f_1003 f_1004 x -0.045936 +f_1003 f_1004 x -0.056841 +f_1003 f_1004 x -0.039423 +f_1004 f_1005 x -0.174601 +f_1004 f_1005 x -0.126434 +f_1004 f_1005 x -0.200955 +f_1004 f_1005 x -0.065868 +f_1004 f_1005 x -0.135015 +f_1005 f_1006 x -0.005004 +f_1005 f_1006 x -0.052989 +f_1005 f_1006 x -0.137597 +f_1005 f_1006 x -0.10143 +f_1005 f_1006 x -0.150544 +f_1006 f_1007 x 0.00194 +f_1006 f_1007 x -0.020898 +f_1006 f_1007 x -0.008821 +f_1006 f_1007 x -0.004604 +f_1006 f_1007 x -0.0516 +f_1007 f_1008 x -0.072577 +f_1007 f_1008 x -0.108647 +f_1007 f_1008 x -0.090148 +f_1007 f_1008 x -0.156442 +f_1007 f_1008 x -0.128324 +f_1008 f_1009 x -0.086092 +f_1008 f_1009 x 0.011503 +f_1008 f_1009 x -0.070738 +f_1008 f_1009 x -0.048589 +f_1008 f_1009 x -0.032849 +f_1009 f_1010 x -0.077762 +f_1009 f_1010 x -0.102182 +f_1009 f_1010 x -0.077388 +f_1009 f_1010 x -0.048259 +f_1009 f_1010 x -0.106654 +f_1010 f_1011 x -0.107925 +f_1010 f_1011 x -0.074153 +f_1010 f_1011 x -0.046166 +f_1010 f_1011 x -0.105082 +f_1010 f_1011 x -0.109697 +f_1011 f_1012 x -0.114147 +f_1011 f_1012 x -0.193337 +f_1011 f_1012 x -0.081829 +f_1011 f_1012 x -0.109909 +f_1011 f_1012 x -0.180126 +f_1012 f_1013 x -0.063825 +f_1012 f_1013 x -0.094552 +f_1012 f_1013 x -0.119662 +f_1012 f_1013 x -0.07877 +f_1012 f_1013 x -0.081715 +f_1013 f_1001 x -0.136329 +f_1013 f_1001 x -0.124971 +f_1013 f_1001 x -0.075831 +f_1013 f_1001 x -0.110905 +f_1013 f_1001 x -0.074551 +m_1027 m_1028 x -0.190285 +m_1027 m_1028 x -0.116158 +m_1027 m_1028 x -0.159631 +m_1027 m_1028 x -0.168323 +m_1027 m_1028 x -0.115116 +m_1028 m_1029 x -0.047101 +m_1028 m_1029 x -0.108092 +m_1028 m_1029 x -0.063646 +m_1028 m_1029 x -0.013492 +m_1028 m_1029 x -0.050001 +m_1029 m_1030 x -0.074749 +m_1029 m_1030 x -0.0461 +m_1029 m_1030 x -0.080191 +m_1029 m_1030 x -0.043393 +m_1029 m_1030 x -0.066529 +m_1030 m_1031 x -0.041418 +m_1030 m_1031 x -0.046616 +m_1030 m_1031 x -0.015607 +m_1030 m_1031 x -0.034914 +m_1030 m_1031 x -0.088874 +m_1031 m_1032 x -0.070922 +m_1031 m_1032 x -0.065517 +m_1031 m_1032 x -0.095383 +m_1031 m_1032 x -0.220017 +m_1031 m_1032 x -0.123048 +m_1032 m_1033 x -0.020985 +m_1032 m_1033 x -0.059387 +m_1032 m_1033 x -0.032041 +m_1032 m_1033 x -0.034125 +m_1032 m_1033 x -0.051097 +m_1033 m_1034 x -0.068623 +m_1033 m_1034 x -0.083128 +m_1033 m_1034 x -0.077355 +m_1033 m_1034 x -0.125626 +m_1033 m_1034 x -0.083417 +m_1034 m_1035 x -0.143532 +m_1034 m_1035 x -0.200868 +m_1034 m_1035 x -0.16596 +m_1034 m_1035 x -0.151486 +m_1034 m_1035 x -0.114951 +m_1035 m_1036 x -0.176893 +m_1035 m_1036 x -0.207564 +m_1035 m_1036 x -0.117525 +m_1035 m_1036 x -0.168342 +m_1035 m_1036 x -0.21075 +m_1036 m_1037 x -0.075311 +m_1036 m_1037 x -0.084175 +m_1036 m_1037 x -0.090178 +m_1036 m_1037 x -0.099832 +m_1036 m_1037 x -0.135049 +m_1037 m_1038 x -0.176783 +m_1037 m_1038 x -0.168007 +m_1037 m_1038 x -0.085472 +m_1037 m_1038 x -0.143515 +m_1037 m_1038 x -0.114927 +m_1038 m_1039 x -0.162465 +m_1038 m_1039 x -0.165675 +m_1038 m_1039 x -0.155784 +m_1038 m_1039 x -0.167747 +m_1038 m_1039 x -0.162331 +m_1039 m_1027 x -0.095913 +m_1039 m_1027 x -0.132247 +m_1039 m_1027 x -0.104928 +m_1039 m_1027 x -0.104656 +m_1039 m_1027 x -0.185046 diff --git a/bob/bio/base/test/data/dev-5col.tar.gz b/bob/bio/base/test/data/dev-5col.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..65a1cefd846ffdf691101b842ee66c1d383df1c8 Binary files /dev/null and b/bob/bio/base/test/data/dev-5col.tar.gz differ diff --git a/bob/bio/base/test/data/dev-5col.txt b/bob/bio/base/test/data/dev-5col.txt new file mode 100644 index 0000000000000000000000000000000000000000..02cd05efea52fcfac85b9a3f856c0475f2412354 --- /dev/null +++ b/bob/bio/base/test/data/dev-5col.txt @@ -0,0 +1,910 @@ +f_1001 x f_1001 x 0.006299 +f_1001 x f_1001 x 0.111554 +f_1001 x f_1001 x -0.092548 +f_1001 x f_1001 x -0.030429 +f_1001 x f_1001 x -0.004657 +f_1001 x f_1003 x -0.070376 +f_1001 x f_1003 x -0.076431 +f_1001 x f_1003 x -0.09103 +f_1001 x f_1003 x -0.119019 +f_1001 x f_1003 x -0.119581 +f_1002 x f_1002 x -0.076412 +f_1002 x f_1002 x -0.007193 +f_1002 x f_1002 x -0.068236 +f_1002 x f_1002 x 0.001462 +f_1002 x f_1002 x -0.089528 +f_1002 x f_1004 x -0.177674 +f_1002 x f_1004 x -0.116451 +f_1002 x f_1004 x -0.105341 +f_1002 x f_1004 x -0.15466 +f_1002 x f_1004 x -0.18616 +f_1003 x f_1003 x 0.259138 +f_1003 x f_1003 x 0.332629 +f_1003 x f_1003 x 0.311423 +f_1003 x f_1003 x 0.162215 +f_1003 x f_1003 x 0.048613 +f_1003 x f_1005 x -0.074399 +f_1003 x f_1005 x -0.04628 +f_1003 x f_1005 x -0.014418 +f_1003 x f_1005 x 0.00478 +f_1003 x f_1005 x -0.016143 +f_1004 x f_1004 x 0.133522 +f_1004 x f_1004 x 0.233416 +f_1004 x f_1004 x 0.157029 +f_1004 x f_1004 x 0.163154 +f_1004 x f_1004 x 0.188569 +f_1004 x f_1006 x -0.111788 +f_1004 x f_1006 x -0.146505 +f_1004 x f_1006 x -0.085332 +f_1004 x f_1006 x -0.143158 +f_1004 x f_1006 x -0.126225 +f_1005 x f_1005 x 0.102271 +f_1005 x f_1005 x 0.045251 +f_1005 x f_1005 x 0.044341 +f_1005 x f_1005 x 0.03692 +f_1005 x f_1005 x -0.013536 +f_1005 x f_1007 x 0.019496 +f_1005 x f_1007 x -0.00295 +f_1005 x f_1007 x -0.027841 +f_1005 x f_1007 x -0.038533 +f_1005 x f_1007 x -0.130486 +f_1006 x f_1006 x 0.155776 +f_1006 x f_1006 x 0.030909 +f_1006 x f_1006 x 0.245848 +f_1006 x f_1006 x 0.450645 +f_1006 x f_1006 x 0.19262 +f_1006 x f_1008 x -0.09691 +f_1006 x f_1008 x -0.109712 +f_1006 x f_1008 x -0.070605 +f_1006 x f_1008 x -0.066152 +f_1006 x f_1008 x -0.037858 +f_1007 x f_1007 x 0.293177 +f_1007 x f_1007 x 0.271007 +f_1007 x f_1007 x 0.318237 +f_1007 x f_1007 x 0.186197 +f_1007 x f_1007 x 0.352784 +f_1007 x f_1009 x -0.050168 +f_1007 x f_1009 x 0.024759 +f_1007 x f_1009 x -0.066628 +f_1007 x f_1009 x -0.04056 +f_1007 x f_1009 x 0.010592 +f_1008 x f_1008 x 0.09707 +f_1008 x f_1008 x -0.022928 +f_1008 x f_1008 x 0.028861 +f_1008 x f_1008 x 0.04206 +f_1008 x f_1008 x 0.066096 +f_1008 x f_1010 x -0.063427 +f_1008 x f_1010 x 0.03159 +f_1008 x f_1010 x -0.049853 +f_1008 x f_1010 x -0.035822 +f_1008 x f_1010 x -0.075959 +f_1009 x f_1009 x 0.077973 +f_1009 x f_1009 x 0.138974 +f_1009 x f_1009 x 0.078081 +f_1009 x f_1009 x 0.098706 +f_1009 x f_1009 x -0.061095 +f_1009 x f_1011 x -0.145006 +f_1009 x f_1011 x -0.137257 +f_1009 x f_1011 x -0.142997 +f_1009 x f_1011 x -0.143305 +f_1009 x f_1011 x -0.131891 +f_1010 x f_1010 x 0.07374 +f_1010 x f_1010 x 0.12733 +f_1010 x f_1010 x 0.071941 +f_1010 x f_1010 x 0.093608 +f_1010 x f_1010 x 0.132198 +f_1010 x f_1012 x 0.102712 +f_1010 x f_1012 x -0.044807 +f_1010 x f_1012 x -0.00116 +f_1010 x f_1012 x 0.030686 +f_1010 x f_1012 x -0.036943 +f_1011 x f_1011 x 0.232048 +f_1011 x f_1011 x 0.22864 +f_1011 x f_1011 x 0.132145 +f_1011 x f_1011 x 0.165999 +f_1011 x f_1011 x 0.120414 +f_1011 x f_1013 x -0.12074 +f_1011 x f_1013 x -0.117955 +f_1011 x f_1013 x -0.076039 +f_1011 x f_1013 x -0.07393 +f_1011 x f_1013 x -0.103342 +f_1012 x f_1001 x -0.020321 +f_1012 x f_1001 x -0.05211 +f_1012 x f_1001 x -0.056951 +f_1012 x f_1001 x 0.013234 +f_1012 x f_1001 x -0.014755 +f_1012 x f_1012 x -0.020073 +f_1012 x f_1012 x 0.051658 +f_1012 x f_1012 x 0.032461 +f_1012 x f_1012 x 0.067917 +f_1012 x f_1012 x 0.052605 +f_1013 x f_1002 x -0.105477 +f_1013 x f_1002 x -0.110275 +f_1013 x f_1002 x -0.118202 +f_1013 x f_1002 x -0.041612 +f_1013 x f_1002 x -0.133065 +f_1013 x f_1013 x 0.003664 +f_1013 x f_1013 x 0.025006 +f_1013 x f_1013 x 0.008643 +f_1013 x f_1013 x 0.027281 +f_1013 x f_1013 x 0.028362 +m_1027 x m_1027 x 0.286687 +m_1027 x m_1027 x 0.183224 +m_1027 x m_1027 x 0.321388 +m_1027 x m_1027 x 0.42079 +m_1027 x m_1027 x 0.53976 +m_1027 x m_1029 x -0.08594 +m_1027 x m_1029 x -0.121272 +m_1027 x m_1029 x -0.113022 +m_1027 x m_1029 x -0.160544 +m_1027 x m_1029 x -0.090424 +m_1028 x m_1028 x 0.017651 +m_1028 x m_1028 x 0.150004 +m_1028 x m_1028 x 0.159424 +m_1028 x m_1028 x 0.052019 +m_1028 x m_1028 x 0.127836 +m_1028 x m_1030 x -0.141315 +m_1028 x m_1030 x -0.029844 +m_1028 x m_1030 x -0.022167 +m_1028 x m_1030 x -0.071379 +m_1028 x m_1030 x -0.099675 +m_1029 x m_1029 x -0.003534 +m_1029 x m_1029 x 0.024651 +m_1029 x m_1029 x 0.060505 +m_1029 x m_1029 x 0.12037 +m_1029 x m_1029 x -0.03431 +m_1029 x m_1031 x -0.03181 +m_1029 x m_1031 x 0.003197 +m_1029 x m_1031 x -0.034498 +m_1029 x m_1031 x -0.050882 +m_1029 x m_1031 x -0.00274 +m_1030 x m_1030 x 0.197724 +m_1030 x m_1030 x 0.207926 +m_1030 x m_1030 x 0.144697 +m_1030 x m_1030 x 0.298164 +m_1030 x m_1030 x 0.180303 +m_1030 x m_1032 x -0.100375 +m_1030 x m_1032 x -0.089028 +m_1030 x m_1032 x -0.096304 +m_1030 x m_1032 x -0.125789 +m_1030 x m_1032 x -0.119192 +m_1031 x m_1031 x 0.178925 +m_1031 x m_1031 x 0.135697 +m_1031 x m_1031 x 0.190606 +m_1031 x m_1031 x 0.268289 +m_1031 x m_1031 x 0.114208 +m_1031 x m_1033 x -0.065958 +m_1031 x m_1033 x -0.042427 +m_1031 x m_1033 x -0.115761 +m_1031 x m_1033 x -0.077916 +m_1031 x m_1033 x -0.179634 +m_1032 x m_1032 x 0.082708 +m_1032 x m_1032 x 0.078839 +m_1032 x m_1032 x 0.031509 +m_1032 x m_1032 x 0.08322 +m_1032 x m_1032 x 0.013146 +m_1032 x m_1034 x -0.094497 +m_1032 x m_1034 x -0.097829 +m_1032 x m_1034 x -0.041958 +m_1032 x m_1034 x -0.112755 +m_1032 x m_1034 x -0.087314 +m_1033 x m_1033 x 0.232628 +m_1033 x m_1033 x 0.430066 +m_1033 x m_1033 x 0.252453 +m_1033 x m_1033 x 0.231405 +m_1033 x m_1033 x 0.032603 +m_1033 x m_1035 x -0.142229 +m_1033 x m_1035 x -0.175921 +m_1033 x m_1035 x -0.200045 +m_1033 x m_1035 x -0.195439 +m_1033 x m_1035 x -0.166693 +m_1034 x m_1034 x 0.179047 +m_1034 x m_1034 x 0.137423 +m_1034 x m_1034 x 0.327826 +m_1034 x m_1034 x 0.207818 +m_1034 x m_1034 x 0.070218 +m_1034 x m_1036 x -0.042577 +m_1034 x m_1036 x -0.107757 +m_1034 x m_1036 x -0.086648 +m_1034 x m_1036 x -0.178798 +m_1034 x m_1036 x -0.11879 +m_1035 x m_1035 x 0.248223 +m_1035 x m_1035 x 0.075324 +m_1035 x m_1035 x 0.017175 +m_1035 x m_1035 x 0.18272 +m_1035 x m_1035 x 0.218537 +m_1035 x m_1037 x -0.055362 +m_1035 x m_1037 x 0.002305 +m_1035 x m_1037 x -0.041379 +m_1035 x m_1037 x -0.058087 +m_1035 x m_1037 x -0.027096 +m_1036 x m_1036 x 0.227317 +m_1036 x m_1036 x 0.376308 +m_1036 x m_1036 x 0.152254 +m_1036 x m_1036 x 0.139492 +m_1036 x m_1036 x 0.013966 +m_1036 x m_1038 x -0.102269 +m_1036 x m_1038 x -0.192218 +m_1036 x m_1038 x -0.112356 +m_1036 x m_1038 x -0.101645 +m_1036 x m_1038 x -0.07972 +m_1037 x m_1037 x 0.038043 +m_1037 x m_1037 x 0.11105 +m_1037 x m_1037 x 0.019263 +m_1037 x m_1037 x 0.16381 +m_1037 x m_1037 x 0.024562 +m_1037 x m_1039 x -0.106496 +m_1037 x m_1039 x -0.100107 +m_1037 x m_1039 x -0.081944 +m_1037 x m_1039 x -0.117425 +m_1037 x m_1039 x -0.084941 +m_1038 x m_1027 x -0.123203 +m_1038 x m_1027 x -0.207728 +m_1038 x m_1027 x -0.1382 +m_1038 x m_1027 x -0.121587 +m_1038 x m_1027 x -0.150723 +m_1038 x m_1038 x 0.213872 +m_1038 x m_1038 x 0.097973 +m_1038 x m_1038 x 0.321722 +m_1038 x m_1038 x 0.18745 +m_1038 x m_1038 x 0.355983 +m_1039 x m_1028 x -0.074966 +m_1039 x m_1028 x -0.03744 +m_1039 x m_1028 x -0.04915 +m_1039 x m_1028 x -0.053868 +m_1039 x m_1028 x -0.034545 +m_1039 x m_1039 x 0.14851 +m_1039 x m_1039 x 0.172884 +m_1039 x m_1039 x 0.291446 +m_1039 x m_1039 x 0.106946 +m_1039 x m_1039 x 0.059841 +f_1001 x f_1001 x 0.033419 +f_1001 x f_1001 x 0.13594 +f_1001 x f_1001 x 0.082771 +f_1001 x f_1001 x 0.046389 +f_1001 x f_1001 x 0.058532 +f_1001 x f_1004 x -0.092433 +f_1001 x f_1004 x -0.09177 +f_1001 x f_1004 x -0.132993 +f_1001 x f_1004 x -0.116056 +f_1001 x f_1004 x -0.084283 +f_1002 x f_1002 x 0.108519 +f_1002 x f_1002 x 0.087181 +f_1002 x f_1002 x 0.064553 +f_1002 x f_1002 x 0.080549 +f_1002 x f_1002 x 0.1712 +f_1002 x f_1005 x -0.076835 +f_1002 x f_1005 x 0.016473 +f_1002 x f_1005 x -0.040655 +f_1002 x f_1005 x -0.06199 +f_1002 x f_1005 x -0.078235 +f_1003 x f_1003 x 0.134625 +f_1003 x f_1003 x 0.172739 +f_1003 x f_1003 x 0.228282 +f_1003 x f_1003 x 0.253931 +f_1003 x f_1003 x 0.238589 +f_1003 x f_1006 x -0.09667 +f_1003 x f_1006 x -0.034176 +f_1003 x f_1006 x -0.1011 +f_1003 x f_1006 x -0.095959 +f_1003 x f_1006 x -0.158999 +f_1004 x f_1004 x 0.097513 +f_1004 x f_1004 x 0.187646 +f_1004 x f_1004 x 0.085344 +f_1004 x f_1004 x 0.114839 +f_1004 x f_1004 x 0.006801 +f_1004 x f_1007 x -0.156948 +f_1004 x f_1007 x -0.165101 +f_1004 x f_1007 x -0.127331 +f_1004 x f_1007 x -0.153506 +f_1004 x f_1007 x -0.195711 +f_1005 x f_1005 x 0.01518 +f_1005 x f_1005 x -7.5e-05 +f_1005 x f_1005 x 0.01684 +f_1005 x f_1005 x -0.005073 +f_1005 x f_1005 x 0.032382 +f_1005 x f_1008 x -0.026999 +f_1005 x f_1008 x -0.029375 +f_1005 x f_1008 x -0.028278 +f_1005 x f_1008 x -0.048425 +f_1005 x f_1008 x -0.135783 +f_1006 x f_1006 x 0.182481 +f_1006 x f_1006 x 0.202499 +f_1006 x f_1006 x 0.239218 +f_1006 x f_1006 x 0.406041 +f_1006 x f_1006 x 0.296635 +f_1006 x f_1009 x -0.068945 +f_1006 x f_1009 x -0.057447 +f_1006 x f_1009 x -0.083765 +f_1006 x f_1009 x -0.037169 +f_1006 x f_1009 x -0.06683 +f_1007 x f_1007 x 0.15405 +f_1007 x f_1007 x 0.305664 +f_1007 x f_1007 x 0.188087 +f_1007 x f_1007 x 0.170585 +f_1007 x f_1007 x 0.109559 +f_1007 x f_1010 x 0.068076 +f_1007 x f_1010 x 0.081827 +f_1007 x f_1010 x 0.014147 +f_1007 x f_1010 x 0.014425 +f_1007 x f_1010 x 0.045884 +f_1008 x f_1008 x 0.139573 +f_1008 x f_1008 x 0.094594 +f_1008 x f_1008 x 0.058536 +f_1008 x f_1008 x 0.021469 +f_1008 x f_1008 x -0.026828 +f_1008 x f_1011 x -0.046452 +f_1008 x f_1011 x -0.114524 +f_1008 x f_1011 x -0.128179 +f_1008 x f_1011 x -0.112471 +f_1008 x f_1011 x -0.083361 +f_1009 x f_1009 x 0.163705 +f_1009 x f_1009 x 0.07234 +f_1009 x f_1009 x 0.126191 +f_1009 x f_1009 x 0.135067 +f_1009 x f_1009 x 0.118532 +f_1009 x f_1012 x -0.064793 +f_1009 x f_1012 x -0.095379 +f_1009 x f_1012 x -0.040691 +f_1009 x f_1012 x -0.070911 +f_1009 x f_1012 x -0.140827 +f_1010 x f_1010 x 0.132978 +f_1010 x f_1010 x 0.041378 +f_1010 x f_1010 x 0.04313 +f_1010 x f_1010 x 0.092458 +f_1010 x f_1010 x 0.096904 +f_1010 x f_1013 x -0.097114 +f_1010 x f_1013 x -0.052594 +f_1010 x f_1013 x -0.02576 +f_1010 x f_1013 x -0.002308 +f_1010 x f_1013 x -0.036247 +f_1011 x f_1001 x -0.109128 +f_1011 x f_1001 x -0.1285 +f_1011 x f_1001 x -0.133866 +f_1011 x f_1001 x -0.101178 +f_1011 x f_1001 x -0.175889 +f_1011 x f_1011 x 0.069141 +f_1011 x f_1011 x 0.177819 +f_1011 x f_1011 x 0.252736 +f_1011 x f_1011 x 0.124971 +f_1011 x f_1011 x -0.037371 +f_1012 x f_1002 x -0.09968 +f_1012 x f_1002 x -0.089508 +f_1012 x f_1002 x -0.169929 +f_1012 x f_1002 x -0.132806 +f_1012 x f_1002 x -0.089144 +f_1012 x f_1012 x 0.073806 +f_1012 x f_1012 x 0.2798 +f_1012 x f_1012 x 0.246575 +f_1012 x f_1012 x 0.349386 +f_1012 x f_1012 x 0.258482 +f_1013 x f_1003 x -0.112431 +f_1013 x f_1003 x -0.129464 +f_1013 x f_1003 x -0.109285 +f_1013 x f_1003 x -0.145877 +f_1013 x f_1003 x -0.168941 +f_1013 x f_1013 x 0.013857 +f_1013 x f_1013 x 0.039728 +f_1013 x f_1013 x 0.031497 +f_1013 x f_1013 x 0.049286 +f_1013 x f_1013 x 0.096255 +m_1027 x m_1027 x 0.060615 +m_1027 x m_1027 x 0.082342 +m_1027 x m_1027 x 0.043655 +m_1027 x m_1027 x -0.099656 +m_1027 x m_1027 x 0.050683 +m_1027 x m_1030 x -0.134642 +m_1027 x m_1030 x -0.261239 +m_1027 x m_1030 x -0.194439 +m_1027 x m_1030 x -0.220323 +m_1027 x m_1030 x -0.256019 +m_1028 x m_1028 x 0.068556 +m_1028 x m_1028 x 0.091921 +m_1028 x m_1028 x 0.031302 +m_1028 x m_1028 x 0.109156 +m_1028 x m_1028 x 0.051723 +m_1028 x m_1031 x -0.049995 +m_1028 x m_1031 x -0.028761 +m_1028 x m_1031 x -0.059723 +m_1028 x m_1031 x -0.031208 +m_1028 x m_1031 x -0.048432 +m_1029 x m_1029 x 0.017661 +m_1029 x m_1029 x 0.028584 +m_1029 x m_1029 x 0.079403 +m_1029 x m_1029 x 0.155884 +m_1029 x m_1029 x 0.160435 +m_1029 x m_1032 x -0.109034 +m_1029 x m_1032 x -0.082531 +m_1029 x m_1032 x -0.036228 +m_1029 x m_1032 x -0.068302 +m_1029 x m_1032 x -0.118334 +m_1030 x m_1030 x 0.064921 +m_1030 x m_1030 x 0.175909 +m_1030 x m_1030 x 0.124186 +m_1030 x m_1030 x 0.167682 +m_1030 x m_1030 x 0.098036 +m_1030 x m_1033 x -0.045998 +m_1030 x m_1033 x -0.050858 +m_1030 x m_1033 x -0.0977 +m_1030 x m_1033 x -0.024854 +m_1030 x m_1033 x 0.005692 +m_1031 x m_1031 x 0.108419 +m_1031 x m_1031 x 0.249197 +m_1031 x m_1031 x 0.170237 +m_1031 x m_1031 x 0.183539 +m_1031 x m_1031 x 0.174438 +m_1031 x m_1034 x -0.016035 +m_1031 x m_1034 x -0.145965 +m_1031 x m_1034 x -0.103444 +m_1031 x m_1034 x -0.141519 +m_1031 x m_1034 x -0.158891 +m_1032 x m_1032 x 0.155962 +m_1032 x m_1032 x 0.188311 +m_1032 x m_1032 x 0.084141 +m_1032 x m_1032 x 0.100994 +m_1032 x m_1032 x 0.146386 +m_1032 x m_1035 x -0.074712 +m_1032 x m_1035 x -0.064903 +m_1032 x m_1035 x -0.101804 +m_1032 x m_1035 x -0.032691 +m_1032 x m_1035 x -0.114303 +m_1033 x m_1033 x 0.240143 +m_1033 x m_1033 x 0.232077 +m_1033 x m_1033 x 0.113915 +m_1033 x m_1033 x 0.191992 +m_1033 x m_1033 x 0.218409 +m_1033 x m_1036 x -0.050754 +m_1033 x m_1036 x -0.136127 +m_1033 x m_1036 x -0.064983 +m_1033 x m_1036 x -0.105041 +m_1033 x m_1036 x -0.08994 +m_1034 x m_1034 x 0.098361 +m_1034 x m_1034 x 0.124989 +m_1034 x m_1034 x 0.096239 +m_1034 x m_1034 x 0.102784 +m_1034 x m_1034 x 0.069988 +m_1034 x m_1037 x -0.154057 +m_1034 x m_1037 x -0.097786 +m_1034 x m_1037 x -0.098328 +m_1034 x m_1037 x -0.162156 +m_1034 x m_1037 x -0.136505 +m_1035 x m_1035 x 0.378851 +m_1035 x m_1035 x 0.487314 +m_1035 x m_1035 x 0.208127 +m_1035 x m_1035 x 0.076721 +m_1035 x m_1035 x 0.345281 +m_1035 x m_1038 x -0.191282 +m_1035 x m_1038 x -0.051842 +m_1035 x m_1038 x -0.141957 +m_1035 x m_1038 x -0.146796 +m_1035 x m_1038 x -0.161529 +m_1036 x m_1036 x -0.028397 +m_1036 x m_1036 x 0.10841 +m_1036 x m_1036 x 0.227747 +m_1036 x m_1036 x 0.1182 +m_1036 x m_1036 x 0.213726 +m_1036 x m_1039 x -0.159576 +m_1036 x m_1039 x -0.094982 +m_1036 x m_1039 x -0.223145 +m_1036 x m_1039 x -0.169588 +m_1036 x m_1039 x -0.131725 +m_1037 x m_1027 x -0.086815 +m_1037 x m_1027 x -0.142433 +m_1037 x m_1027 x -0.094744 +m_1037 x m_1027 x -0.139911 +m_1037 x m_1027 x -0.110981 +m_1037 x m_1037 x 0.188964 +m_1037 x m_1037 x 0.191109 +m_1037 x m_1037 x 0.177809 +m_1037 x m_1037 x 0.342173 +m_1037 x m_1037 x 0.320537 +m_1038 x m_1028 x -0.022658 +m_1038 x m_1028 x -0.121851 +m_1038 x m_1028 x -0.094836 +m_1038 x m_1028 x -0.092378 +m_1038 x m_1028 x -0.128918 +m_1038 x m_1038 x 0.088761 +m_1038 x m_1038 x 0.23967 +m_1038 x m_1038 x 0.2144 +m_1038 x m_1038 x 0.225245 +m_1038 x m_1038 x 0.166043 +m_1039 x m_1029 x -0.094188 +m_1039 x m_1029 x -0.137532 +m_1039 x m_1029 x -0.106247 +m_1039 x m_1029 x -0.051079 +m_1039 x m_1029 x -0.09995 +m_1039 x m_1039 x 0.047286 +m_1039 x m_1039 x 0.066872 +m_1039 x m_1039 x 0.084683 +m_1039 x m_1039 x 0.14965 +m_1039 x m_1039 x 0.061803 +f_1001 x f_1001 x 0.092146 +f_1001 x f_1001 x 0.069535 +f_1001 x f_1001 x 0.130482 +f_1001 x f_1001 x 0.121077 +f_1001 x f_1001 x 0.046827 +f_1001 x f_1005 x -0.07389 +f_1001 x f_1005 x -0.005571 +f_1001 x f_1005 x -0.038638 +f_1001 x f_1005 x -0.069725 +f_1001 x f_1005 x -0.106528 +f_1002 x f_1002 x 0.152725 +f_1002 x f_1002 x 0.068492 +f_1002 x f_1002 x 0.021185 +f_1002 x f_1002 x 0.100351 +f_1002 x f_1002 x 0.110254 +f_1002 x f_1006 x -0.045543 +f_1002 x f_1006 x -0.103691 +f_1002 x f_1006 x -0.109144 +f_1002 x f_1006 x -0.136591 +f_1002 x f_1006 x -0.066464 +f_1003 x f_1003 x 0.250429 +f_1003 x f_1003 x 0.216766 +f_1003 x f_1003 x 0.369219 +f_1003 x f_1003 x 0.088713 +f_1003 x f_1003 x 0.300226 +f_1003 x f_1007 x -0.076819 +f_1003 x f_1007 x -0.149137 +f_1003 x f_1007 x -0.135019 +f_1003 x f_1007 x -0.163912 +f_1003 x f_1007 x -0.095181 +f_1004 x f_1004 x 0.121271 +f_1004 x f_1004 x 0.040588 +f_1004 x f_1004 x -0.055486 +f_1004 x f_1004 x 0.037581 +f_1004 x f_1004 x -0.051495 +f_1004 x f_1008 x -0.058328 +f_1004 x f_1008 x -0.080856 +f_1004 x f_1008 x -0.098234 +f_1004 x f_1008 x -0.074142 +f_1004 x f_1008 x -0.105869 +f_1005 x f_1005 x 0.055989 +f_1005 x f_1005 x 0.002048 +f_1005 x f_1005 x 0.065929 +f_1005 x f_1005 x 0.075466 +f_1005 x f_1005 x 0.063656 +f_1005 x f_1009 x -0.015425 +f_1005 x f_1009 x -0.030571 +f_1005 x f_1009 x -0.051191 +f_1005 x f_1009 x -0.011377 +f_1005 x f_1009 x -0.029323 +f_1006 x f_1006 x 0.114515 +f_1006 x f_1006 x 0.193478 +f_1006 x f_1006 x 0.263637 +f_1006 x f_1006 x 0.124408 +f_1006 x f_1006 x 0.253012 +f_1006 x f_1010 x -0.045272 +f_1006 x f_1010 x -0.008281 +f_1006 x f_1010 x -0.098975 +f_1006 x f_1010 x -0.052164 +f_1006 x f_1010 x -0.038489 +f_1007 x f_1007 x 0.416937 +f_1007 x f_1007 x 0.152148 +f_1007 x f_1007 x 0.260329 +f_1007 x f_1007 x 0.302488 +f_1007 x f_1007 x 0.197565 +f_1007 x f_1011 x -0.025394 +f_1007 x f_1011 x -0.03248 +f_1007 x f_1011 x -0.018316 +f_1007 x f_1011 x 0.002981 +f_1007 x f_1011 x -0.084619 +f_1008 x f_1008 x 0.21788 +f_1008 x f_1008 x 0.135293 +f_1008 x f_1008 x 0.075077 +f_1008 x f_1008 x 0.07734 +f_1008 x f_1008 x 0.005587 +f_1008 x f_1012 x -0.155008 +f_1008 x f_1012 x -0.146633 +f_1008 x f_1012 x -0.091813 +f_1008 x f_1012 x -0.134748 +f_1008 x f_1012 x -0.112009 +f_1009 x f_1009 x 0.07703 +f_1009 x f_1009 x 0.20282 +f_1009 x f_1009 x 0.047498 +f_1009 x f_1009 x 0.14907 +f_1009 x f_1009 x 0.065152 +f_1009 x f_1013 x -0.040804 +f_1009 x f_1013 x -0.108543 +f_1009 x f_1013 x -0.069024 +f_1009 x f_1013 x -0.093558 +f_1009 x f_1013 x -0.104821 +f_1010 x f_1001 x 0.030117 +f_1010 x f_1001 x -0.001707 +f_1010 x f_1001 x 0.023293 +f_1010 x f_1001 x 0.044433 +f_1010 x f_1001 x 0.036691 +f_1010 x f_1010 x 0.090399 +f_1010 x f_1010 x 0.287217 +f_1010 x f_1010 x 0.17436 +f_1010 x f_1010 x 0.072507 +f_1010 x f_1010 x 0.169799 +f_1011 x f_1002 x -0.098069 +f_1011 x f_1002 x -0.059601 +f_1011 x f_1002 x -0.116737 +f_1011 x f_1002 x -0.091612 +f_1011 x f_1002 x -0.124484 +f_1011 x f_1011 x 0.061337 +f_1011 x f_1011 x 0.078452 +f_1011 x f_1011 x 0.053488 +f_1011 x f_1011 x 0.274413 +f_1011 x f_1011 x 0.025676 +f_1012 x f_1003 x -0.172277 +f_1012 x f_1003 x -0.139654 +f_1012 x f_1003 x -0.110438 +f_1012 x f_1003 x -0.147711 +f_1012 x f_1003 x -0.144899 +f_1012 x f_1012 x -0.008046 +f_1012 x f_1012 x 0.01118 +f_1012 x f_1012 x 0.069386 +f_1012 x f_1012 x 0.018678 +f_1012 x f_1012 x 0.090871 +f_1013 x f_1004 x -0.139999 +f_1013 x f_1004 x -0.146055 +f_1013 x f_1004 x -0.080982 +f_1013 x f_1004 x -0.11122 +f_1013 x f_1004 x -0.048738 +f_1013 x f_1013 x 0.08644 +f_1013 x f_1013 x 0.031428 +f_1013 x f_1013 x 0.110492 +f_1013 x f_1013 x 0.080487 +f_1013 x f_1013 x 0.129129 +m_1027 x m_1027 x -0.030796 +m_1027 x m_1027 x 0.166674 +m_1027 x m_1027 x -0.054503 +m_1027 x m_1027 x 0.216297 +m_1027 x m_1027 x 0.036048 +m_1027 x m_1031 x -0.068606 +m_1027 x m_1031 x -0.087531 +m_1027 x m_1031 x -0.079769 +m_1027 x m_1031 x -0.105363 +m_1027 x m_1031 x -0.017589 +m_1028 x m_1028 x 0.057595 +m_1028 x m_1028 x 0.12494 +m_1028 x m_1028 x 0.285578 +m_1028 x m_1028 x 0.068244 +m_1028 x m_1028 x 0.027044 +m_1028 x m_1032 x -0.08819 +m_1028 x m_1032 x -0.014659 +m_1028 x m_1032 x -0.060915 +m_1028 x m_1032 x -0.058342 +m_1028 x m_1032 x 0.002364 +m_1029 x m_1029 x 0.007404 +m_1029 x m_1029 x -0.04252 +m_1029 x m_1029 x -0.032869 +m_1029 x m_1029 x 0.029775 +m_1029 x m_1029 x -0.051259 +m_1029 x m_1033 x -0.158181 +m_1029 x m_1033 x -0.121331 +m_1029 x m_1033 x -0.144152 +m_1029 x m_1033 x -0.156712 +m_1029 x m_1033 x -0.177725 +m_1030 x m_1030 x 0.056945 +m_1030 x m_1030 x 0.317025 +m_1030 x m_1030 x 0.325579 +m_1030 x m_1030 x 0.284201 +m_1030 x m_1030 x 0.230508 +m_1030 x m_1034 x -0.022487 +m_1030 x m_1034 x -0.048232 +m_1030 x m_1034 x -0.145175 +m_1030 x m_1034 x -0.123378 +m_1030 x m_1034 x -0.073831 +m_1031 x m_1031 x 0.193519 +m_1031 x m_1031 x 0.175608 +m_1031 x m_1031 x 0.107447 +m_1031 x m_1031 x 0.199848 +m_1031 x m_1031 x 0.168314 +m_1031 x m_1035 x -0.020661 +m_1031 x m_1035 x -0.065903 +m_1031 x m_1035 x -0.125195 +m_1031 x m_1035 x -0.110455 +m_1031 x m_1035 x -0.094515 +m_1032 x m_1032 x 0.195781 +m_1032 x m_1032 x 0.096999 +m_1032 x m_1032 x -0.008268 +m_1032 x m_1032 x 0.069079 +m_1032 x m_1032 x 0.044985 +m_1032 x m_1036 x -0.076835 +m_1032 x m_1036 x -0.088222 +m_1032 x m_1036 x -0.120676 +m_1032 x m_1036 x -0.142852 +m_1032 x m_1036 x -0.086772 +m_1033 x m_1033 x -0.029097 +m_1033 x m_1033 x 0.061971 +m_1033 x m_1033 x 0.019417 +m_1033 x m_1033 x 0.037331 +m_1033 x m_1033 x 0.127991 +m_1033 x m_1037 x -0.175094 +m_1033 x m_1037 x -0.150287 +m_1033 x m_1037 x -0.220412 +m_1033 x m_1037 x -0.172678 +m_1033 x m_1037 x -0.169294 +m_1034 x m_1034 x 0.149889 +m_1034 x m_1034 x 0.066521 +m_1034 x m_1034 x 0.101737 +m_1034 x m_1034 x 0.100917 +m_1034 x m_1034 x 0.085561 +m_1034 x m_1038 x -0.124248 +m_1034 x m_1038 x -0.038474 +m_1034 x m_1038 x -0.068404 +m_1034 x m_1038 x -0.058341 +m_1034 x m_1038 x -0.115717 +m_1035 x m_1035 x 0.213568 +m_1035 x m_1035 x 0.029325 +m_1035 x m_1035 x 0.194311 +m_1035 x m_1035 x 0.249343 +m_1035 x m_1035 x 0.093952 +m_1035 x m_1039 x -0.090435 +m_1035 x m_1039 x -0.153427 +m_1035 x m_1039 x -0.083921 +m_1035 x m_1039 x -0.070264 +m_1035 x m_1039 x -0.057297 +m_1036 x m_1027 x -0.115691 +m_1036 x m_1027 x -0.059323 +m_1036 x m_1027 x -0.186053 +m_1036 x m_1027 x -0.175012 +m_1036 x m_1027 x -0.166257 +m_1036 x m_1036 x 0.063842 +m_1036 x m_1036 x 0.154448 +m_1036 x m_1036 x 0.389991 +m_1036 x m_1036 x 0.316025 +m_1036 x m_1036 x 0.30907 +m_1037 x m_1028 x -0.075955 +m_1037 x m_1028 x -0.080148 +m_1037 x m_1028 x -0.021735 +m_1037 x m_1028 x -0.056239 +m_1037 x m_1028 x -0.026486 +m_1037 x m_1037 x 0.103612 +m_1037 x m_1037 x 0.259835 +m_1037 x m_1037 x 0.243031 +m_1037 x m_1037 x 0.118142 +m_1037 x m_1037 x 0.164509 +m_1038 x m_1029 x -0.041864 +m_1038 x m_1029 x -0.003681 +m_1038 x m_1029 x -0.0213 +m_1038 x m_1029 x -0.003561 +m_1038 x m_1029 x -0.048595 +m_1038 x m_1038 x 0.182035 +m_1038 x m_1038 x 0.121601 +m_1038 x m_1038 x 0.231335 +m_1038 x m_1038 x 0.2318 +m_1038 x m_1038 x 0.378738 +m_1039 x m_1030 x -0.186483 +m_1039 x m_1030 x -0.153817 +m_1039 x m_1030 x -0.164871 +m_1039 x m_1030 x -0.099591 +m_1039 x m_1030 x -0.204401 +m_1039 x m_1039 x 0.095322 +m_1039 x m_1039 x 0.072113 +m_1039 x m_1039 x 0.139665 +m_1039 x m_1039 x 0.132828 +m_1039 x m_1039 x 0.169885 +f_1001 x f_1002 x -0.079848 +f_1001 x f_1002 x -0.138407 +f_1001 x f_1002 x -0.05771 +f_1001 x f_1002 x -0.101174 +f_1001 x f_1002 x -0.084897 +f_1002 x f_1003 x -0.073879 +f_1002 x f_1003 x 0.04615 +f_1002 x f_1003 x 0.075474 +f_1002 x f_1003 x -0.012754 +f_1002 x f_1003 x -0.006101 +f_1003 x f_1004 x -0.033191 +f_1003 x f_1004 x -0.070245 +f_1003 x f_1004 x -0.045936 +f_1003 x f_1004 x -0.056841 +f_1003 x f_1004 x -0.039423 +f_1004 x f_1005 x -0.174601 +f_1004 x f_1005 x -0.126434 +f_1004 x f_1005 x -0.200955 +f_1004 x f_1005 x -0.065868 +f_1004 x f_1005 x -0.135015 +f_1005 x f_1006 x -0.005004 +f_1005 x f_1006 x -0.052989 +f_1005 x f_1006 x -0.137597 +f_1005 x f_1006 x -0.10143 +f_1005 x f_1006 x -0.150544 +f_1006 x f_1007 x 0.00194 +f_1006 x f_1007 x -0.020898 +f_1006 x f_1007 x -0.008821 +f_1006 x f_1007 x -0.004604 +f_1006 x f_1007 x -0.0516 +f_1007 x f_1008 x -0.072577 +f_1007 x f_1008 x -0.108647 +f_1007 x f_1008 x -0.090148 +f_1007 x f_1008 x -0.156442 +f_1007 x f_1008 x -0.128324 +f_1008 x f_1009 x -0.086092 +f_1008 x f_1009 x 0.011503 +f_1008 x f_1009 x -0.070738 +f_1008 x f_1009 x -0.048589 +f_1008 x f_1009 x -0.032849 +f_1009 x f_1010 x -0.077762 +f_1009 x f_1010 x -0.102182 +f_1009 x f_1010 x -0.077388 +f_1009 x f_1010 x -0.048259 +f_1009 x f_1010 x -0.106654 +f_1010 x f_1011 x -0.107925 +f_1010 x f_1011 x -0.074153 +f_1010 x f_1011 x -0.046166 +f_1010 x f_1011 x -0.105082 +f_1010 x f_1011 x -0.109697 +f_1011 x f_1012 x -0.114147 +f_1011 x f_1012 x -0.193337 +f_1011 x f_1012 x -0.081829 +f_1011 x f_1012 x -0.109909 +f_1011 x f_1012 x -0.180126 +f_1012 x f_1013 x -0.063825 +f_1012 x f_1013 x -0.094552 +f_1012 x f_1013 x -0.119662 +f_1012 x f_1013 x -0.07877 +f_1012 x f_1013 x -0.081715 +f_1013 x f_1001 x -0.136329 +f_1013 x f_1001 x -0.124971 +f_1013 x f_1001 x -0.075831 +f_1013 x f_1001 x -0.110905 +f_1013 x f_1001 x -0.074551 +m_1027 x m_1028 x -0.190285 +m_1027 x m_1028 x -0.116158 +m_1027 x m_1028 x -0.159631 +m_1027 x m_1028 x -0.168323 +m_1027 x m_1028 x -0.115116 +m_1028 x m_1029 x -0.047101 +m_1028 x m_1029 x -0.108092 +m_1028 x m_1029 x -0.063646 +m_1028 x m_1029 x -0.013492 +m_1028 x m_1029 x -0.050001 +m_1029 x m_1030 x -0.074749 +m_1029 x m_1030 x -0.0461 +m_1029 x m_1030 x -0.080191 +m_1029 x m_1030 x -0.043393 +m_1029 x m_1030 x -0.066529 +m_1030 x m_1031 x -0.041418 +m_1030 x m_1031 x -0.046616 +m_1030 x m_1031 x -0.015607 +m_1030 x m_1031 x -0.034914 +m_1030 x m_1031 x -0.088874 +m_1031 x m_1032 x -0.070922 +m_1031 x m_1032 x -0.065517 +m_1031 x m_1032 x -0.095383 +m_1031 x m_1032 x -0.220017 +m_1031 x m_1032 x -0.123048 +m_1032 x m_1033 x -0.020985 +m_1032 x m_1033 x -0.059387 +m_1032 x m_1033 x -0.032041 +m_1032 x m_1033 x -0.034125 +m_1032 x m_1033 x -0.051097 +m_1033 x m_1034 x -0.068623 +m_1033 x m_1034 x -0.083128 +m_1033 x m_1034 x -0.077355 +m_1033 x m_1034 x -0.125626 +m_1033 x m_1034 x -0.083417 +m_1034 x m_1035 x -0.143532 +m_1034 x m_1035 x -0.200868 +m_1034 x m_1035 x -0.16596 +m_1034 x m_1035 x -0.151486 +m_1034 x m_1035 x -0.114951 +m_1035 x m_1036 x -0.176893 +m_1035 x m_1036 x -0.207564 +m_1035 x m_1036 x -0.117525 +m_1035 x m_1036 x -0.168342 +m_1035 x m_1036 x -0.21075 +m_1036 x m_1037 x -0.075311 +m_1036 x m_1037 x -0.084175 +m_1036 x m_1037 x -0.090178 +m_1036 x m_1037 x -0.099832 +m_1036 x m_1037 x -0.135049 +m_1037 x m_1038 x -0.176783 +m_1037 x m_1038 x -0.168007 +m_1037 x m_1038 x -0.085472 +m_1037 x m_1038 x -0.143515 +m_1037 x m_1038 x -0.114927 +m_1038 x m_1039 x -0.162465 +m_1038 x m_1039 x -0.165675 +m_1038 x m_1039 x -0.155784 +m_1038 x m_1039 x -0.167747 +m_1038 x m_1039 x -0.162331 +m_1039 x m_1027 x -0.095913 +m_1039 x m_1027 x -0.132247 +m_1039 x m_1027 x -0.104928 +m_1039 x m_1027 x -0.104656 +m_1039 x m_1027 x -0.185046 diff --git a/bob/bio/base/test/data/scores-cmc-4col-open-set-one-error.txt b/bob/bio/base/test/data/scores-cmc-4col-open-set-one-error.txt new file mode 100644 index 0000000000000000000000000000000000000000..ab3f4a187d8592df4460f29ed09e0a655972732b --- /dev/null +++ b/bob/bio/base/test/data/scores-cmc-4col-open-set-one-error.txt @@ -0,0 +1,27 @@ +1 1 probe_1 1 +1 1 probe_2 1 +1 2 probe_3 0 +1 2 probe_4 0 +1 2 probe_5 0 +1 3 probe_6 0 +1 3 probe_7 0 +1 4 probe_8 0 +1 5 probe_9 0 +2 1 probe_1 0 +2 1 probe_2 0 +2 2 probe_3 1 +2 2 probe_4 1 +2 2 probe_5 1 +2 3 probe_6 0 +2 3 probe_7 0 +2 4 probe_8 0 +2 5 probe_9 0 +3 1 probe_1 0 +3 1 probe_2 0 +3 2 probe_3 0 +3 2 probe_4 0 +3 2 probe_5 0 +3 3 probe_6 1 +3 3 probe_7 -0.1 +3 4 probe_8 0 +3 5 probe_9 0 diff --git a/bob/bio/base/test/data/scores-cmc-4col-open-set-two-errors.txt b/bob/bio/base/test/data/scores-cmc-4col-open-set-two-errors.txt new file mode 100644 index 0000000000000000000000000000000000000000..f8f7ba24c5de55cb904a70f64501615c404416f1 --- /dev/null +++ b/bob/bio/base/test/data/scores-cmc-4col-open-set-two-errors.txt @@ -0,0 +1,27 @@ +1 1 probe_1 1 +1 1 probe_2 1 +1 2 probe_3 0 +1 2 probe_4 0 +1 2 probe_5 0 +1 3 probe_6 0 +1 3 probe_7 0 +1 4 probe_8 0 +1 5 probe_9 0 +2 1 probe_1 0 +2 1 probe_2 0 +2 2 probe_3 1 +2 2 probe_4 1 +2 2 probe_5 1 +2 3 probe_6 0 +2 3 probe_7 0 +2 4 probe_8 0 +2 5 probe_9 0 +3 1 probe_1 0 +3 1 probe_2 0 +3 2 probe_3 0 +3 2 probe_4 0 +3 2 probe_5 0 +3 3 probe_6 1 +3 3 probe_7 -0.1 +3 4 probe_8 0 +3 5 probe_9 10 diff --git a/bob/bio/base/test/data/scores-cmc-4col-open-set.txt b/bob/bio/base/test/data/scores-cmc-4col-open-set.txt new file mode 100644 index 0000000000000000000000000000000000000000..75ed810189de655dce5d9d3314568ea1c09c8bb5 --- /dev/null +++ b/bob/bio/base/test/data/scores-cmc-4col-open-set.txt @@ -0,0 +1,27 @@ +1 1 probe_1 1 +1 1 probe_2 1 +1 2 probe_3 0 +1 2 probe_4 0 +1 2 probe_5 0 +1 3 probe_6 0 +1 3 probe_7 0 +1 4 probe_8 0 +1 5 probe_9 0 +2 1 probe_1 0 +2 1 probe_2 0 +2 2 probe_3 1 +2 2 probe_4 1 +2 2 probe_5 1 +2 3 probe_6 0 +2 3 probe_7 0 +2 4 probe_8 0 +2 5 probe_9 0 +3 1 probe_1 0 +3 1 probe_2 0 +3 2 probe_3 0 +3 2 probe_4 0 +3 2 probe_5 0 +3 3 probe_6 1 +3 3 probe_7 1 +3 4 probe_8 0 +3 5 probe_9 0 diff --git a/bob/bio/base/test/data/scores-cmc-4col.txt b/bob/bio/base/test/data/scores-cmc-4col.txt new file mode 100644 index 0000000000000000000000000000000000000000..33a76cab1bd5b61b29ff0975b3cdca9eb4bebf6d --- /dev/null +++ b/bob/bio/base/test/data/scores-cmc-4col.txt @@ -0,0 +1,2000 @@ +3 3 s3/1 -1379.79268746 +3 3 s3/3 -1634.53276051 +3 3 s3/6 -1727.90866176 +3 3 s3/8 -1330.68401315 +3 3 s3/10 -1912.77343391 +3 4 s4/1 -1746.88596714 +3 4 s4/3 -1613.06319303 +3 4 s4/6 -2313.24329277 +3 4 s4/8 -1591.98392217 +3 4 s4/10 -2730.9754808 +3 7 s7/1 -3460.44008764 +3 7 s7/3 -3433.49050371 +3 7 s7/6 -3089.89562483 +3 7 s7/8 -3432.42457034 +3 7 s7/10 -3079.0440811 +3 8 s8/1 -3620.2592394 +3 8 s8/3 -3269.98024589 +3 8 s8/6 -3358.21797555 +3 8 s8/8 -3387.03907938 +3 8 s8/10 -3171.50666852 +3 9 s9/1 -2811.95946617 +3 9 s9/3 -2664.59585669 +3 9 s9/6 -2656.05911704 +3 9 s9/8 -2443.67278587 +3 9 s9/10 -2850.31782429 +3 13 s13/1 -2946.82573528 +3 13 s13/3 -3583.79672567 +3 13 s13/6 -2963.54066016 +3 13 s13/8 -2868.46385067 +3 13 s13/10 -2538.48690592 +3 15 s15/1 -3173.69053082 +3 15 s15/3 -3178.53876882 +3 15 s15/6 -3111.42098722 +3 15 s15/8 -3329.41061343 +3 15 s15/10 -2596.58956879 +3 18 s18/1 -3182.79708708 +3 18 s18/3 -2614.69595605 +3 18 s18/6 -2706.60809944 +3 18 s18/8 -2840.19223113 +3 18 s18/10 -2862.66900744 +3 19 s19/1 -3536.77408534 +3 19 s19/3 -4027.07052594 +3 19 s19/6 -3672.1595268 +3 19 s19/8 -3986.46152677 +3 19 s19/10 -3253.32219871 +3 22 s22/1 -4010.21487048 +3 22 s22/3 -3830.02378375 +3 22 s22/6 -4432.88810546 +3 22 s22/8 -4157.95710081 +3 22 s22/10 -4366.73686546 +3 23 s23/1 -3053.33185632 +3 23 s23/3 -3919.97013765 +3 23 s23/6 -3288.54921504 +3 23 s23/8 -3445.7429271 +3 23 s23/10 -2728.4009081 +3 25 s25/1 -2077.78964037 +3 25 s25/3 -1996.27706821 +3 25 s25/6 -2158.13414247 +3 25 s25/8 -2365.446406 +3 25 s25/10 -2113.26873798 +3 28 s28/1 -3442.83435448 +3 28 s28/3 -3163.25423353 +3 28 s28/6 -3227.02394654 +3 28 s28/8 -3383.5929893 +3 28 s28/10 -3270.67275578 +3 30 s30/1 -3399.50034429 +3 30 s30/3 -3755.26703911 +3 30 s30/6 -3390.40001552 +3 30 s30/8 -4088.11071666 +3 30 s30/10 -3448.70029605 +3 31 s31/1 -3317.91933517 +3 31 s31/3 -4129.53432195 +3 31 s31/6 -2703.85344626 +3 31 s31/8 -3028.36256979 +3 31 s31/10 -4117.12107523 +3 32 s32/1 -3451.07982123 +3 32 s32/3 -3659.08758621 +3 32 s32/6 -2912.5121953 +3 32 s32/8 -3239.29507593 +3 32 s32/10 -2816.61664649 +3 35 s35/1 -3532.22591289 +3 35 s35/3 -2825.64434863 +3 35 s35/6 -2226.87247619 +3 35 s35/8 -2273.17374368 +3 35 s35/10 -2807.78371377 +3 37 s37/1 -3090.7830507 +3 37 s37/3 -3356.19444943 +3 37 s37/6 -3819.78140964 +3 37 s37/8 -3280.30431209 +3 37 s37/10 -3019.52908155 +3 38 s38/1 -3047.63407732 +3 38 s38/3 -2972.12269097 +3 38 s38/6 -3484.48437412 +3 38 s38/8 -3216.05224462 +3 38 s38/10 -3207.45635903 +3 40 s40/1 -2506.31589548 +3 40 s40/3 -2738.67714294 +3 40 s40/6 -2826.35311781 +3 40 s40/8 -2477.55650197 +3 40 s40/10 -2856.55209634 +4 3 s3/1 -2097.51280034 +4 3 s3/3 -2023.3387048 +4 3 s3/6 -2217.05890884 +4 3 s3/8 -2328.42194559 +4 3 s3/10 -1579.12873829 +4 4 s4/1 -2109.51091365 +4 4 s4/3 -2397.45985327 +4 4 s4/6 -2674.80222663 +4 4 s4/8 -2048.16132875 +4 4 s4/10 -1597.37572542 +4 7 s7/1 -3368.69187597 +4 7 s7/3 -3371.00271615 +4 7 s7/6 -3232.68335763 +4 7 s7/8 -3607.3979377 +4 7 s7/10 -2884.55057149 +4 8 s8/1 -4303.76466702 +4 8 s8/3 -3202.42396848 +4 8 s8/6 -3372.60526358 +4 8 s8/8 -3351.99028682 +4 8 s8/10 -2875.5348275 +4 9 s9/1 -2860.08677303 +4 9 s9/3 -2688.67567353 +4 9 s9/6 -3232.40160873 +4 9 s9/8 -2632.11421778 +4 9 s9/10 -2286.6605215 +4 13 s13/1 -4233.37474823 +4 13 s13/3 -4777.76108956 +4 13 s13/6 -3509.80014011 +4 13 s13/8 -4071.49161933 +4 13 s13/10 -3663.00400217 +4 15 s15/1 -3090.32050098 +4 15 s15/3 -3109.87978493 +4 15 s15/6 -3244.80395029 +4 15 s15/8 -3159.54011618 +4 15 s15/10 -3212.33935998 +4 18 s18/1 -3029.88191105 +4 18 s18/3 -3693.98946937 +4 18 s18/6 -3365.9813891 +4 18 s18/8 -3671.60318908 +4 18 s18/10 -3439.17926362 +4 19 s19/1 -4126.33284024 +4 19 s19/3 -4687.64632666 +4 19 s19/6 -4503.65118444 +4 19 s19/8 -4597.81186541 +4 19 s19/10 -4061.93959722 +4 22 s22/1 -4420.20420385 +4 22 s22/3 -4122.6265905 +4 22 s22/6 -4991.81040461 +4 22 s22/8 -4531.38441564 +4 22 s22/10 -4980.44450294 +4 23 s23/1 -3401.81702162 +4 23 s23/3 -4028.1336055 +4 23 s23/6 -3978.45100619 +4 23 s23/8 -3211.22978325 +4 23 s23/10 -3198.10535623 +4 25 s25/1 -2062.04530856 +4 25 s25/3 -1864.81104842 +4 25 s25/6 -2407.68073618 +4 25 s25/8 -3439.82293636 +4 25 s25/10 -1794.81628586 +4 28 s28/1 -4540.54004502 +4 28 s28/3 -4383.64097847 +4 28 s28/6 -4281.67440812 +4 28 s28/8 -3946.61365052 +4 28 s28/10 -4569.28625396 +4 30 s30/1 -3051.1905347 +4 30 s30/3 -3573.25826858 +4 30 s30/6 -3172.93119916 +4 30 s30/8 -4035.35954145 +4 30 s30/10 -3361.40514185 +4 31 s31/1 -3252.21215713 +4 31 s31/3 -4491.10730478 +4 31 s31/6 -2883.97999623 +4 31 s31/8 -2974.33442689 +4 31 s31/10 -4419.81756879 +4 32 s32/1 -3701.92675808 +4 32 s32/3 -4230.76047786 +4 32 s32/6 -3251.25421788 +4 32 s32/8 -3866.64264384 +4 32 s32/10 -3237.44016449 +4 35 s35/1 -4204.25090013 +4 35 s35/3 -3758.36177331 +4 35 s35/6 -2154.19941863 +4 35 s35/8 -2145.22688345 +4 35 s35/10 -3437.97238277 +4 37 s37/1 -4096.71829358 +4 37 s37/3 -4415.32539877 +4 37 s37/6 -4645.02754118 +4 37 s37/8 -4196.70618568 +4 37 s37/10 -4103.73478556 +4 38 s38/1 -3692.77721021 +4 38 s38/3 -3596.5152585 +4 38 s38/6 -4024.46292833 +4 38 s38/8 -3013.42746448 +4 38 s38/10 -3585.91031401 +4 40 s40/1 -3217.76780761 +4 40 s40/3 -2798.59798876 +4 40 s40/6 -3653.68846351 +4 40 s40/8 -3265.06174969 +4 40 s40/10 -4288.3030138 +7 3 s3/1 -3120.00216408 +7 3 s3/3 -2988.66583317 +7 3 s3/6 -2928.16408153 +7 3 s3/8 -3234.07830596 +7 3 s3/10 -2929.70625522 +7 4 s4/1 -3459.39856577 +7 4 s4/3 -3822.00572827 +7 4 s4/6 -3925.86211815 +7 4 s4/8 -3681.6492638 +7 4 s4/10 -3313.51262759 +7 7 s7/1 -617.825862238 +7 7 s7/3 -867.409063056 +7 7 s7/6 -1353.44151952 +7 7 s7/8 -1609.78693924 +7 7 s7/10 -1305.90153291 +7 8 s8/1 -4327.87306526 +7 8 s8/3 -3735.28132801 +7 8 s8/6 -3899.4043867 +7 8 s8/8 -4159.10909214 +7 8 s8/10 -3690.00289726 +7 9 s9/1 -3461.41683118 +7 9 s9/3 -3474.96610279 +7 9 s9/6 -3796.28874482 +7 9 s9/8 -3248.35661343 +7 9 s9/10 -3331.48914238 +7 13 s13/1 -4921.81558057 +7 13 s13/3 -5177.0115092 +7 13 s13/6 -4377.79358814 +7 13 s13/8 -4549.47680222 +7 13 s13/10 -4268.93263282 +7 15 s15/1 -3076.7368174 +7 15 s15/3 -3047.13247253 +7 15 s15/6 -3249.84902365 +7 15 s15/8 -3150.50121815 +7 15 s15/10 -3452.85315844 +7 18 s18/1 -3945.39914918 +7 18 s18/3 -4458.14092777 +7 18 s18/6 -4013.01623566 +7 18 s18/8 -4338.24226246 +7 18 s18/10 -3961.85437891 +7 19 s19/1 -4809.91164653 +7 19 s19/3 -5232.22205615 +7 19 s19/6 -5157.79783698 +7 19 s19/8 -4651.29311084 +7 19 s19/10 -4874.47981006 +7 22 s22/1 -4459.6222356 +7 22 s22/3 -4377.94066581 +7 22 s22/6 -4686.89847305 +7 22 s22/8 -4587.77483596 +7 22 s22/10 -4960.77430892 +7 23 s23/1 -2844.66296646 +7 23 s23/3 -3577.80820325 +7 23 s23/6 -3760.03833299 +7 23 s23/8 -2592.30467393 +7 23 s23/10 -2782.98926037 +7 25 s25/1 -3709.91905593 +7 25 s25/3 -3673.52485981 +7 25 s25/6 -4135.41309534 +7 25 s25/8 -4498.09934416 +7 25 s25/10 -3867.02458523 +7 28 s28/1 -4903.59623882 +7 28 s28/3 -4959.06234558 +7 28 s28/6 -4757.67310498 +7 28 s28/8 -4397.00986327 +7 28 s28/10 -5163.55107447 +7 30 s30/1 -3564.22134558 +7 30 s30/3 -3884.05161515 +7 30 s30/6 -3278.45824218 +7 30 s30/8 -4203.96866458 +7 30 s30/10 -3703.03644002 +7 31 s31/1 -3610.5222855 +7 31 s31/3 -4647.7502073 +7 31 s31/6 -3826.85642829 +7 31 s31/8 -3697.79390825 +7 31 s31/10 -4711.21976699 +7 32 s32/1 -4224.76328171 +7 32 s32/3 -4880.3701751 +7 32 s32/6 -3467.34232266 +7 32 s32/8 -4205.0790813 +7 32 s32/10 -3366.64775879 +7 35 s35/1 -4139.19915643 +7 35 s35/3 -4165.24385506 +7 35 s35/6 -3757.11460823 +7 35 s35/8 -3488.0609092 +7 35 s35/10 -3316.41532002 +7 37 s37/1 -4439.26346467 +7 37 s37/3 -4628.42859719 +7 37 s37/6 -4800.49047203 +7 37 s37/8 -4425.21313548 +7 37 s37/10 -4472.06844594 +7 38 s38/1 -3637.57257635 +7 38 s38/3 -3831.59619911 +7 38 s38/6 -3844.91237951 +7 38 s38/8 -3161.92143097 +7 38 s38/10 -3168.10019452 +7 40 s40/1 -3577.73736278 +7 40 s40/3 -3146.39774768 +7 40 s40/6 -3882.04884366 +7 40 s40/8 -3735.30412249 +7 40 s40/10 -4467.95343226 +8 3 s3/1 -3816.49167388 +8 3 s3/3 -4243.79743359 +8 3 s3/6 -3082.51718778 +8 3 s3/8 -3020.22874228 +8 3 s3/10 -4113.09549687 +8 4 s4/1 -3039.48610771 +8 4 s4/3 -3040.63946246 +8 4 s4/6 -3395.10221087 +8 4 s4/8 -3116.55675349 +8 4 s4/10 -4497.62739774 +8 7 s7/1 -4211.6114398 +8 7 s7/3 -3931.41737091 +8 7 s7/6 -3580.80042267 +8 7 s7/8 -3709.35948031 +8 7 s7/10 -4510.99928392 +8 8 s8/1 -1135.46945823 +8 8 s8/3 -1664.95236718 +8 8 s8/6 -1745.06667956 +8 8 s8/8 -1874.43093948 +8 8 s8/10 -2061.08463491 +8 9 s9/1 -4297.44821021 +8 9 s9/3 -4353.85917889 +8 9 s9/6 -3575.52734928 +8 9 s9/8 -3475.1781057 +8 9 s9/10 -4719.13057395 +8 13 s13/1 -4636.95144656 +8 13 s13/3 -4732.44942349 +8 13 s13/6 -4704.23970245 +8 13 s13/8 -4514.0326596 +8 13 s13/10 -4266.08581029 +8 15 s15/1 -3669.79436722 +8 15 s15/3 -3580.75949187 +8 15 s15/6 -3609.71332974 +8 15 s15/8 -3755.57239855 +8 15 s15/10 -3543.09126099 +8 18 s18/1 -4961.2173049 +8 18 s18/3 -4109.75653182 +8 18 s18/6 -3995.44195704 +8 18 s18/8 -4177.49528886 +8 18 s18/10 -3950.04207524 +8 19 s19/1 -4297.15335629 +8 19 s19/3 -4870.31852193 +8 19 s19/6 -4496.97200871 +8 19 s19/8 -4094.66435512 +8 19 s19/10 -3822.2449824 +8 22 s22/1 -4780.99227159 +8 22 s22/3 -4689.028013 +8 22 s22/6 -4984.82882451 +8 22 s22/8 -4879.72886553 +8 22 s22/10 -5098.05356772 +8 23 s23/1 -3405.79008991 +8 23 s23/3 -4776.51868726 +8 23 s23/6 -4161.72307492 +8 23 s23/8 -4788.46294731 +8 23 s23/10 -3315.41957354 +8 25 s25/1 -3824.59345334 +8 25 s25/3 -3845.76304451 +8 25 s25/6 -3763.12504434 +8 25 s25/8 -3761.5899582 +8 25 s25/10 -3905.03364425 +8 28 s28/1 -4877.23858214 +8 28 s28/3 -4705.39011288 +8 28 s28/6 -4772.27918626 +8 28 s28/8 -5550.62266467 +8 28 s28/10 -4717.01599088 +8 30 s30/1 -4084.52503825 +8 30 s30/3 -4221.1789981 +8 30 s30/6 -4061.9396941 +8 30 s30/8 -4709.78243598 +8 30 s30/10 -3900.24932223 +8 31 s31/1 -4796.206716 +8 31 s31/3 -5007.39195856 +8 31 s31/6 -4423.3107164 +8 31 s31/8 -4652.91164347 +8 31 s31/10 -4980.18129086 +8 32 s32/1 -3938.07008877 +8 32 s32/3 -4224.23005286 +8 32 s32/6 -2928.42135463 +8 32 s32/8 -3585.26122854 +8 32 s32/10 -3020.08375318 +8 35 s35/1 -4733.303325 +8 35 s35/3 -4275.11431188 +8 35 s35/6 -3467.16231594 +8 35 s35/8 -3506.0442336 +8 35 s35/10 -4471.58251982 +8 37 s37/1 -5197.10341632 +8 37 s37/3 -5296.46506571 +8 37 s37/6 -5060.04946633 +8 37 s37/8 -4485.87436358 +8 37 s37/10 -4939.53354307 +8 38 s38/1 -3295.6245965 +8 38 s38/3 -3303.72233957 +8 38 s38/6 -3557.30039322 +8 38 s38/8 -3781.97830608 +8 38 s38/10 -3744.9474251 +8 40 s40/1 -4572.35498313 +8 40 s40/3 -4854.67113335 +8 40 s40/6 -4103.05579492 +8 40 s40/8 -4230.86819166 +8 40 s40/10 -3904.31330825 +9 3 s3/1 -2547.5104482 +9 3 s3/3 -2725.45115096 +9 3 s3/6 -2211.99297617 +9 3 s3/8 -2416.50020167 +9 3 s3/10 -2808.00169181 +9 4 s4/1 -2252.65199646 +9 4 s4/3 -2590.48954693 +9 4 s4/6 -3289.80948945 +9 4 s4/8 -2569.14238439 +9 4 s4/10 -2649.76082109 +9 7 s7/1 -3300.80205386 +9 7 s7/3 -3384.85442682 +9 7 s7/6 -3308.89117021 +9 7 s7/8 -3280.71373687 +9 7 s7/10 -3315.55371503 +9 8 s8/1 -4185.21171568 +9 8 s8/3 -3634.51475298 +9 8 s8/6 -4019.79386655 +9 8 s8/8 -3900.67066506 +9 8 s8/10 -3532.26591473 +9 9 s9/1 -1232.98008048 +9 9 s9/3 -1256.06667593 +9 9 s9/6 -1764.52243494 +9 9 s9/8 -1447.87853552 +9 9 s9/10 -1789.71184484 +9 13 s13/1 -4619.25396528 +9 13 s13/3 -5175.65502321 +9 13 s13/6 -4272.85697332 +9 13 s13/8 -4553.62609701 +9 13 s13/10 -4244.44673611 +9 15 s15/1 -3454.43840637 +9 15 s15/3 -3439.87009412 +9 15 s15/6 -3578.29135252 +9 15 s15/8 -3440.83204868 +9 15 s15/10 -2665.60947707 +9 18 s18/1 -4148.87008937 +9 18 s18/3 -4109.69400345 +9 18 s18/6 -4091.07132553 +9 18 s18/8 -4208.3489515 +9 18 s18/10 -3757.36612039 +9 19 s19/1 -4807.20953164 +9 19 s19/3 -5347.47059831 +9 19 s19/6 -5037.02683897 +9 19 s19/8 -5158.78820124 +9 19 s19/10 -4623.00188 +9 22 s22/1 -4154.24807601 +9 22 s22/3 -3844.22286129 +9 22 s22/6 -4415.27940247 +9 22 s22/8 -4209.98015364 +9 22 s22/10 -4700.9501879 +9 23 s23/1 -2403.64952559 +9 23 s23/3 -2965.62721504 +9 23 s23/6 -2970.82455651 +9 23 s23/8 -2439.9060999 +9 23 s23/10 -2362.75062609 +9 25 s25/1 -2186.76811782 +9 25 s25/3 -2250.01746741 +9 25 s25/6 -2913.21012077 +9 25 s25/8 -3486.83051857 +9 25 s25/10 -2463.4559735 +9 28 s28/1 -4918.87479674 +9 28 s28/3 -4681.85746463 +9 28 s28/6 -4617.28665292 +9 28 s28/8 -4548.91590351 +9 28 s28/10 -4964.8811564 +9 30 s30/1 -2468.85347323 +9 30 s30/3 -2684.22105025 +9 30 s30/6 -2352.19611749 +9 30 s30/8 -3203.79571838 +9 30 s30/10 -2589.19072649 +9 31 s31/1 -1990.71715309 +9 31 s31/3 -4574.3250072 +9 31 s31/6 -2638.76143027 +9 31 s31/8 -2136.9668398 +9 31 s31/10 -4586.19479594 +9 32 s32/1 -4540.36181713 +9 32 s32/3 -4868.08338276 +9 32 s32/6 -4037.78030625 +9 32 s32/8 -4490.67607519 +9 32 s32/10 -3923.63980576 +9 35 s35/1 -3121.69389479 +9 35 s35/3 -3916.72829133 +9 35 s35/6 -3123.62025962 +9 35 s35/8 -2480.64668786 +9 35 s35/10 -3432.45445572 +9 37 s37/1 -4479.69370996 +9 37 s37/3 -4742.56540091 +9 37 s37/6 -4993.89089683 +9 37 s37/8 -4566.20131271 +9 37 s37/10 -4537.43975603 +9 38 s38/1 -2505.17244521 +9 38 s38/3 -2707.94431745 +9 38 s38/6 -2761.29272417 +9 38 s38/8 -2263.62593044 +9 38 s38/10 -2398.09045021 +9 40 s40/1 -2928.99104151 +9 40 s40/3 -3022.18661213 +9 40 s40/6 -2909.42717431 +9 40 s40/8 -2900.50106801 +9 40 s40/10 -3514.24554484 +13 3 s3/1 -3202.38137554 +13 3 s3/3 -3308.2248404 +13 3 s3/6 -3501.44047001 +13 3 s3/8 -3262.35823784 +13 3 s3/10 -3444.20525571 +13 4 s4/1 -3649.59387841 +13 4 s4/3 -3390.63212187 +13 4 s4/6 -3246.33460094 +13 4 s4/8 -3342.89496156 +13 4 s4/10 -4299.54590767 +13 7 s7/1 -4715.98664504 +13 7 s7/3 -4609.27291027 +13 7 s7/6 -4422.0260616 +13 7 s7/8 -4722.80244759 +13 7 s7/10 -4029.53815479 +13 8 s8/1 -4670.41935822 +13 8 s8/3 -4525.99460014 +13 8 s8/6 -4406.83573849 +13 8 s8/8 -4474.32175203 +13 8 s8/10 -4572.86719878 +13 9 s9/1 -4637.22294275 +13 9 s9/3 -4500.651687 +13 9 s9/6 -4463.61015407 +13 9 s9/8 -4243.16691824 +13 9 s9/10 -4572.15435639 +13 13 s13/1 -1025.77704523 +13 13 s13/3 -1783.98005114 +13 13 s13/6 -1558.11784716 +13 13 s13/8 -1039.99583084 +13 13 s13/10 -703.448590077 +13 15 s15/1 -4038.32937849 +13 15 s15/3 -4158.46410153 +13 15 s15/6 -3796.56417856 +13 15 s15/8 -4429.3755221 +13 15 s15/10 -3585.52994631 +13 18 s18/1 -2812.99173883 +13 18 s18/3 -1891.55964525 +13 18 s18/6 -2035.67549695 +13 18 s18/8 -1978.19724817 +13 18 s18/10 -2499.42504522 +13 19 s19/1 -3567.82071157 +13 19 s19/3 -3234.31779564 +13 19 s19/6 -3159.33639979 +13 19 s19/8 -3323.52201903 +13 19 s19/10 -3551.06114754 +13 22 s22/1 -5414.57148439 +13 22 s22/3 -5371.51231446 +13 22 s22/6 -5895.08586155 +13 22 s22/8 -5541.10555282 +13 22 s22/10 -5289.97985403 +13 23 s23/1 -4783.79443316 +13 23 s23/3 -5184.20935404 +13 23 s23/6 -4767.83616152 +13 23 s23/8 -5121.71712236 +13 23 s23/10 -4559.26698216 +13 25 s25/1 -3377.53134774 +13 25 s25/3 -3115.54927275 +13 25 s25/6 -2950.2693355 +13 25 s25/8 -2610.67305436 +13 25 s25/10 -3284.9945593 +13 28 s28/1 -2818.43584739 +13 28 s28/3 -2939.87837017 +13 28 s28/6 -2959.54612292 +13 28 s28/8 -3249.15642063 +13 28 s28/10 -2605.52287392 +13 30 s30/1 -5339.28315308 +13 30 s30/3 -5611.91473319 +13 30 s30/6 -5330.75403669 +13 30 s30/8 -5777.47373497 +13 30 s30/10 -5300.57333828 +13 31 s31/1 -5210.82295907 +13 31 s31/3 -4412.76465696 +13 31 s31/6 -4441.92121769 +13 31 s31/8 -4896.76699795 +13 31 s31/10 -4488.13181919 +13 32 s32/1 -3150.51061775 +13 32 s32/3 -3159.71478883 +13 32 s32/6 -3334.54053001 +13 32 s32/8 -3056.73154297 +13 32 s32/10 -3413.7973795 +13 35 s35/1 -3886.54628516 +13 35 s35/3 -3043.08940014 +13 35 s35/6 -2749.45139543 +13 35 s35/8 -3165.90623178 +13 35 s35/10 -3046.81538122 +13 37 s37/1 -2678.74294941 +13 37 s37/3 -2658.9158326 +13 37 s37/6 -3609.67071608 +13 37 s37/8 -3538.43631387 +13 37 s37/10 -2501.21295259 +13 38 s38/1 -4953.92150692 +13 38 s38/3 -4742.48319921 +13 38 s38/6 -5178.55887189 +13 38 s38/8 -5038.90368513 +13 38 s38/10 -4841.33560269 +13 40 s40/1 -2809.70264194 +13 40 s40/3 -3157.01332876 +13 40 s40/6 -2927.3338441 +13 40 s40/8 -2688.96600375 +13 40 s40/10 -3069.88991179 +15 3 s3/1 -2580.30354292 +15 3 s3/3 -2834.29603042 +15 3 s3/6 -2759.19839368 +15 3 s3/8 -2783.20695581 +15 3 s3/10 -3143.83963287 +15 4 s4/1 -2202.64057116 +15 4 s4/3 -2301.81039791 +15 4 s4/6 -3097.5947528 +15 4 s4/8 -2350.44748544 +15 4 s4/10 -3349.64729233 +15 7 s7/1 -3311.13835445 +15 7 s7/3 -3267.20955526 +15 7 s7/6 -2929.4992405 +15 7 s7/8 -3137.60235246 +15 7 s7/10 -3259.5085004 +15 8 s8/1 -3351.22118121 +15 8 s8/3 -3589.75913922 +15 8 s8/6 -3772.85395682 +15 8 s8/8 -3625.2943284 +15 8 s8/10 -3654.16304296 +15 9 s9/1 -2915.57607571 +15 9 s9/3 -2894.11208415 +15 9 s9/6 -2772.64507605 +15 9 s9/8 -2588.56558412 +15 9 s9/10 -3200.31211964 +15 13 s13/1 -3586.37478927 +15 13 s13/3 -3774.84487141 +15 13 s13/6 -3542.40649551 +15 13 s13/8 -3742.37638037 +15 13 s13/10 -3370.21784657 +15 15 s15/1 -2402.53690896 +15 15 s15/3 -2367.48473176 +15 15 s15/6 -2374.53446452 +15 15 s15/8 -2022.0055133 +15 15 s15/10 -969.500884681 +15 18 s18/1 -3871.88457482 +15 18 s18/3 -3148.77140084 +15 18 s18/6 -3291.11248654 +15 18 s18/8 -3218.72499924 +15 18 s18/10 -3401.64969692 +15 19 s19/1 -3757.87263186 +15 19 s19/3 -4112.05649595 +15 19 s19/6 -3812.79868872 +15 19 s19/8 -4000.182565 +15 19 s19/10 -3583.69493135 +15 22 s22/1 -3195.0359962 +15 22 s22/3 -3028.62720878 +15 22 s22/6 -3498.44994816 +15 22 s22/8 -3283.34848436 +15 22 s22/10 -3446.01197175 +15 23 s23/1 -3070.25974401 +15 23 s23/3 -3390.20344442 +15 23 s23/6 -2932.20788748 +15 23 s23/8 -3571.3765668 +15 23 s23/10 -2954.78677002 +15 25 s25/1 -2611.29833149 +15 25 s25/3 -2829.31199376 +15 25 s25/6 -2714.51118348 +15 25 s25/8 -2870.18228171 +15 25 s25/10 -2864.16113222 +15 28 s28/1 -3753.4390575 +15 28 s28/3 -3623.60109655 +15 28 s28/6 -3554.51786063 +15 28 s28/8 -4121.24848957 +15 28 s28/10 -3803.49807022 +15 30 s30/1 -2649.16787496 +15 30 s30/3 -2898.3050272 +15 30 s30/6 -2667.58480765 +15 30 s30/8 -3007.14301998 +15 30 s30/10 -2629.9532381 +15 31 s31/1 -2816.97617563 +15 31 s31/3 -3076.41676091 +15 31 s31/6 -2482.64472589 +15 31 s31/8 -2679.15146696 +15 31 s31/10 -3032.7179238 +15 32 s32/1 -3455.24452617 +15 32 s32/3 -3442.20655852 +15 32 s32/6 -2990.03785573 +15 32 s32/8 -3263.88075526 +15 32 s32/10 -2841.40823188 +15 35 s35/1 -2748.56316738 +15 35 s35/3 -2025.04895307 +15 35 s35/6 -2608.84048224 +15 35 s35/8 -2225.51881792 +15 35 s35/10 -2699.40465375 +15 37 s37/1 -3776.23292984 +15 37 s37/3 -3875.69905416 +15 37 s37/6 -3703.36249652 +15 37 s37/8 -3265.46678469 +15 37 s37/10 -3826.94635927 +15 38 s38/1 -3084.26750791 +15 38 s38/3 -2851.27680759 +15 38 s38/6 -3295.81461978 +15 38 s38/8 -3172.81880218 +15 38 s38/10 -2947.70788332 +15 40 s40/1 -2943.88908446 +15 40 s40/3 -3270.57500985 +15 40 s40/6 -3019.89230379 +15 40 s40/8 -2933.41439825 +15 40 s40/10 -2891.00228583 +18 3 s3/1 -2956.0754384 +18 3 s3/3 -2753.84726042 +18 3 s3/6 -3202.07741089 +18 3 s3/8 -3223.11593887 +18 3 s3/10 -2672.34954412 +18 4 s4/1 -3433.27996686 +18 4 s4/3 -3560.49800004 +18 4 s4/6 -3365.12571015 +18 4 s4/8 -3343.40806464 +18 4 s4/10 -3335.1372178 +18 7 s7/1 -4104.2010016 +18 7 s7/3 -3962.80832438 +18 7 s7/6 -3984.14020527 +18 7 s7/8 -4326.38507592 +18 7 s7/10 -3257.72684289 +18 8 s8/1 -4836.19576879 +18 8 s8/3 -4152.65556388 +18 8 s8/6 -4134.79509243 +18 8 s8/8 -4138.08421509 +18 8 s8/10 -4040.64411074 +18 9 s9/1 -4398.74565735 +18 9 s9/3 -4257.16821011 +18 9 s9/6 -4452.68844392 +18 9 s9/8 -3882.39685689 +18 9 s9/10 -3796.72563078 +18 13 s13/1 -2740.04630919 +18 13 s13/3 -3060.0403958 +18 13 s13/6 -1630.54131366 +18 13 s13/8 -2421.86464267 +18 13 s13/10 -1997.96008334 +18 15 s15/1 -3876.18244178 +18 15 s15/3 -4022.47338995 +18 15 s15/6 -3795.16118689 +18 15 s15/8 -4223.76072291 +18 15 s15/10 -3537.02525272 +18 18 s18/1 -1368.23821308 +18 18 s18/3 -2066.23727685 +18 18 s18/6 -1587.61885353 +18 18 s18/8 -1839.87833423 +18 18 s18/10 -1990.61368518 +18 19 s19/1 -4252.46720452 +18 19 s19/3 -4139.21533354 +18 19 s19/6 -4281.91841669 +18 19 s19/8 -4104.2220241 +18 19 s19/10 -4395.90138652 +18 22 s22/1 -5777.64079119 +18 22 s22/3 -5629.23262098 +18 22 s22/6 -6322.34503807 +18 22 s22/8 -5891.32768241 +18 22 s22/10 -5932.51211239 +18 23 s23/1 -4440.91979543 +18 23 s23/3 -4879.48453038 +18 23 s23/6 -4783.21865357 +18 23 s23/8 -4380.11974451 +18 23 s23/10 -4314.32765436 +18 25 s25/1 -2878.87604183 +18 25 s25/3 -2601.15384147 +18 25 s25/6 -2763.80042895 +18 25 s25/8 -3275.1127543 +18 25 s25/10 -2710.48883585 +18 28 s28/1 -3883.4795926 +18 28 s28/3 -4014.70519937 +18 28 s28/6 -3864.86883847 +18 28 s28/8 -3617.13881658 +18 28 s28/10 -3927.90765349 +18 30 s30/1 -4917.40113865 +18 30 s30/3 -5253.20232186 +18 30 s30/6 -4902.57477108 +18 30 s30/8 -5610.87560505 +18 30 s30/10 -5071.17081244 +18 31 s31/1 -4970.03856356 +18 31 s31/3 -4780.61996987 +18 31 s31/6 -4481.51880791 +18 31 s31/8 -4749.72667526 +18 31 s31/10 -4752.82800544 +18 32 s32/1 -2884.34375405 +18 32 s32/3 -3357.01185028 +18 32 s32/6 -3294.4650071 +18 32 s32/8 -3358.04252319 +18 32 s32/10 -3465.1118564 +18 35 s35/1 -4054.0884318 +18 35 s35/3 -3541.25317234 +18 35 s35/6 -2447.59004413 +18 35 s35/8 -2683.93015099 +18 35 s35/10 -2927.94916434 +18 37 s37/1 -3388.73624303 +18 37 s37/3 -3528.1627107 +18 37 s37/6 -4547.2080635 +18 37 s37/8 -4411.99514613 +18 37 s37/10 -3340.94174374 +18 38 s38/1 -4926.36256402 +18 38 s38/3 -4839.07834759 +18 38 s38/6 -5135.8908713 +18 38 s38/8 -4499.47476968 +18 38 s38/10 -4760.28286303 +18 40 s40/1 -2584.2597622 +18 40 s40/3 -2220.28936413 +18 40 s40/6 -3041.32775422 +18 40 s40/8 -2592.87675242 +18 40 s40/10 -3699.5280574 +19 3 s3/1 -4005.79246239 +19 3 s3/3 -4118.92914119 +19 3 s3/6 -3833.14889994 +19 3 s3/8 -3715.575243 +19 3 s3/10 -3939.12020766 +19 4 s4/1 -3860.16054019 +19 4 s4/3 -3381.42907685 +19 4 s4/6 -2945.51696829 +19 4 s4/8 -3243.10737747 +19 4 s4/10 -4452.30579568 +19 7 s7/1 -4507.31651077 +19 7 s7/3 -4382.64231377 +19 7 s7/6 -4072.18663786 +19 7 s7/8 -4514.54034327 +19 7 s7/10 -4232.66998104 +19 8 s8/1 -3990.13253476 +19 8 s8/3 -3726.14317857 +19 8 s8/6 -3455.3955025 +19 8 s8/8 -3531.65964868 +19 8 s8/10 -3811.69795385 +19 9 s9/1 -4804.84536787 +19 9 s9/3 -4630.67492625 +19 9 s9/6 -4542.81319946 +19 9 s9/8 -4591.6733388 +19 9 s9/10 -4912.24892349 +19 13 s13/1 -3408.93242688 +19 13 s13/3 -3636.10644374 +19 13 s13/6 -3575.5230924 +19 13 s13/8 -3289.4655635 +19 13 s13/10 -3252.51422672 +19 15 s15/1 -2502.05494556 +19 15 s15/3 -2560.5900693 +19 15 s15/6 -2174.31152183 +19 15 s15/8 -3363.01313433 +19 15 s15/10 -4132.71151481 +19 18 s18/1 -4098.47532505 +19 18 s18/3 -3791.90925274 +19 18 s18/6 -3671.29856609 +19 18 s18/8 -3836.71681672 +19 18 s18/10 -4058.53157732 +19 19 s19/1 -1655.10609509 +19 19 s19/3 -1856.32442417 +19 19 s19/6 -1981.77662831 +19 19 s19/8 -1523.05351521 +19 19 s19/10 -1793.32063537 +19 22 s22/1 -4542.93709979 +19 22 s22/3 -4635.20062189 +19 22 s22/6 -5138.72256328 +19 22 s22/8 -4765.76162168 +19 22 s22/10 -4569.45199841 +19 23 s23/1 -5065.46201531 +19 23 s23/3 -5420.00135699 +19 23 s23/6 -5058.84946146 +19 23 s23/8 -5477.31680922 +19 23 s23/10 -4714.11885335 +19 25 s25/1 -4100.03600349 +19 25 s25/3 -3788.16763441 +19 25 s25/6 -3668.54705235 +19 25 s25/8 -3174.69288854 +19 25 s25/10 -3891.93512538 +19 28 s28/1 -3672.44822887 +19 28 s28/3 -3812.86840783 +19 28 s28/6 -3780.88145851 +19 28 s28/8 -4165.96288079 +19 28 s28/10 -3337.29227785 +19 30 s30/1 -5068.60509747 +19 30 s30/3 -5434.14163217 +19 30 s30/6 -5091.08219443 +19 30 s30/8 -5324.80076583 +19 30 s30/10 -4972.50450074 +19 31 s31/1 -5305.66141746 +19 31 s31/3 -3515.22861155 +19 31 s31/6 -4189.50566417 +19 31 s31/8 -4843.40808253 +19 31 s31/10 -3660.63476966 +19 32 s32/1 -2757.87174686 +19 32 s32/3 -2711.40948091 +19 32 s32/6 -2238.58130064 +19 32 s32/8 -2184.17893198 +19 32 s32/10 -2245.49686462 +19 35 s35/1 -4935.13588897 +19 35 s35/3 -3622.32708653 +19 35 s35/6 -3149.32892904 +19 35 s35/8 -3679.30587397 +19 35 s35/10 -3981.87228096 +19 37 s37/1 -4190.64319758 +19 37 s37/3 -4273.59867669 +19 37 s37/6 -3188.35987423 +19 37 s37/8 -2939.93025623 +19 37 s37/10 -3739.14927102 +19 38 s38/1 -5132.75426835 +19 38 s38/3 -4887.07661704 +19 38 s38/6 -5341.51844801 +19 38 s38/8 -5280.0711527 +19 38 s38/10 -5097.22377921 +19 40 s40/1 -4408.92556724 +19 40 s40/3 -4593.0477807 +19 40 s40/6 -4322.70610622 +19 40 s40/8 -4277.09971507 +19 40 s40/10 -4340.68119243 +22 3 s3/1 -4013.83712581 +22 3 s3/3 -4245.36091725 +22 3 s3/6 -4722.0005028 +22 3 s3/8 -4557.14551599 +22 3 s3/10 -4681.20048979 +22 4 s4/1 -3972.68768043 +22 4 s4/3 -3803.29638751 +22 4 s4/6 -4846.51452184 +22 4 s4/8 -3932.32391055 +22 4 s4/10 -4979.62265907 +22 7 s7/1 -4500.57252797 +22 7 s7/3 -4711.79647694 +22 7 s7/6 -4246.06155028 +22 7 s7/8 -4473.03310168 +22 7 s7/10 -4771.9361284 +22 8 s8/1 -4808.75178772 +22 8 s8/3 -5343.98374147 +22 8 s8/6 -5345.90674104 +22 8 s8/8 -5506.97670535 +22 8 s8/10 -5362.94961502 +22 9 s9/1 -3961.80579929 +22 9 s9/3 -3938.10362431 +22 9 s9/6 -4430.72639074 +22 9 s9/8 -4573.51790429 +22 9 s9/10 -4746.78613148 +22 13 s13/1 -5118.0573909 +22 13 s13/3 -5607.88818019 +22 13 s13/6 -5450.28639594 +22 13 s13/8 -5618.92461221 +22 13 s13/10 -5269.30155745 +22 15 s15/1 -3288.79672215 +22 15 s15/3 -3155.55321591 +22 15 s15/6 -3290.84168107 +22 15 s15/8 -3060.21058005 +22 15 s15/10 -3611.64723744 +22 18 s18/1 -6041.21843213 +22 18 s18/3 -5627.85835651 +22 18 s18/6 -5861.88863557 +22 18 s18/8 -5749.26554893 +22 18 s18/10 -6014.4979931 +22 19 s19/1 -4535.04894157 +22 19 s19/3 -5014.09830014 +22 19 s19/6 -4377.88594459 +22 19 s19/8 -4849.96254847 +22 19 s19/10 -4155.11215747 +22 22 s22/1 -515.267348009 +22 22 s22/3 -948.789791163 +22 22 s22/6 -1236.73608805 +22 22 s22/8 -703.084336005 +22 22 s22/10 -974.100293608 +22 23 s23/1 -4848.46219366 +22 23 s23/3 -4427.04439093 +22 23 s23/6 -4246.68145015 +22 23 s23/8 -4982.13108183 +22 23 s23/10 -4667.97047257 +22 25 s25/1 -4786.34227314 +22 25 s25/3 -4911.21676656 +22 25 s25/6 -4626.34028371 +22 25 s25/8 -4656.62335836 +22 25 s25/10 -4872.79827361 +22 28 s28/1 -4443.72189883 +22 28 s28/3 -4186.33599304 +22 28 s28/6 -4236.66798511 +22 28 s28/8 -4657.9993282 +22 28 s28/10 -4475.19769706 +22 30 s30/1 -3498.14355065 +22 30 s30/3 -3666.29410946 +22 30 s30/6 -3665.83521491 +22 30 s30/8 -3217.52750188 +22 30 s30/10 -3434.77055482 +22 31 s31/1 -3556.91714853 +22 31 s31/3 -3458.06518471 +22 31 s31/6 -3016.7938301 +22 31 s31/8 -3298.13128919 +22 31 s31/10 -3434.44289401 +22 32 s32/1 -5419.57225464 +22 32 s32/3 -5171.4314143 +22 32 s32/6 -4530.98788336 +22 32 s32/8 -4837.08556526 +22 32 s32/10 -4175.5812598 +22 35 s35/1 -4552.24712413 +22 35 s35/3 -3474.81249522 +22 35 s35/6 -4649.99115585 +22 35 s35/8 -4618.95104803 +22 35 s35/10 -4853.86653993 +22 37 s37/1 -4657.89159791 +22 37 s37/3 -4753.32433721 +22 37 s37/6 -3407.21749321 +22 37 s37/8 -2896.36740895 +22 37 s37/10 -4695.07449402 +22 38 s38/1 -4441.09611284 +22 38 s38/3 -3904.35113202 +22 38 s38/6 -4643.11936678 +22 38 s38/8 -4656.44212352 +22 38 s38/10 -4053.67652122 +22 40 s40/1 -4775.90517716 +22 40 s40/3 -5412.87280174 +22 40 s40/6 -4934.41367373 +22 40 s40/8 -4823.481109 +22 40 s40/10 -4752.20632024 +23 3 s3/1 -3065.793728 +23 3 s3/3 -3304.1012835 +23 3 s3/6 -2697.94897454 +23 3 s3/8 -2973.96709773 +23 3 s3/10 -3566.87643249 +23 4 s4/1 -3094.90242262 +23 4 s4/3 -3411.1778258 +23 4 s4/6 -3857.43636003 +23 4 s4/8 -3478.50057655 +23 4 s4/10 -3162.81838569 +23 7 s7/1 -2970.79992083 +23 7 s7/3 -3061.24569793 +23 7 s7/6 -3027.32222561 +23 7 s7/8 -2632.47938729 +23 7 s7/10 -3661.11323529 +23 8 s8/1 -4030.10186955 +23 8 s8/3 -4046.05381812 +23 8 s8/6 -4444.70155607 +23 8 s8/8 -4195.29697767 +23 8 s8/10 -3971.18744652 +23 9 s9/1 -2465.22492143 +23 9 s9/3 -2631.16651264 +23 9 s9/6 -2331.92162879 +23 9 s9/8 -2595.47426281 +23 9 s9/10 -3109.15007245 +23 13 s13/1 -4925.13286069 +23 13 s13/3 -5261.47692111 +23 13 s13/6 -4728.2214681 +23 13 s13/8 -4804.98067266 +23 13 s13/10 -4585.90879842 +23 15 s15/1 -3513.75609217 +23 15 s15/3 -3547.3463239 +23 15 s15/6 -3652.02243904 +23 15 s15/8 -3701.23646049 +23 15 s15/10 -2773.22918254 +23 18 s18/1 -4497.83217492 +23 18 s18/3 -4301.17531852 +23 18 s18/6 -4468.58853409 +23 18 s18/8 -4424.05826795 +23 18 s18/10 -4098.27151373 +23 19 s19/1 -5223.28531335 +23 19 s19/3 -5610.25680194 +23 19 s19/6 -5351.32214373 +23 19 s19/8 -5291.98946574 +23 19 s19/10 -5051.51557636 +23 22 s22/1 -4207.6908045 +23 22 s22/3 -4053.78539765 +23 22 s22/6 -4258.27826468 +23 22 s22/8 -4411.93016966 +23 22 s22/10 -4706.94088805 +23 23 s23/1 -1879.51262825 +23 23 s23/3 -1794.12311521 +23 23 s23/6 -1253.49476703 +23 23 s23/8 -1932.52036884 +23 23 s23/10 -1955.91394431 +23 25 s25/1 -3123.01825674 +23 25 s25/3 -3316.35999994 +23 25 s25/6 -3614.98555187 +23 25 s25/8 -3803.60236161 +23 25 s25/10 -3402.73744394 +23 28 s28/1 -5279.40944257 +23 28 s28/3 -5064.11538426 +23 28 s28/6 -5055.93827636 +23 28 s28/8 -5065.31467415 +23 28 s28/10 -5178.60269835 +23 30 s30/1 -2554.16599194 +23 30 s30/3 -2376.32433571 +23 30 s30/6 -2383.73666842 +23 30 s30/8 -3071.95287764 +23 30 s30/10 -2516.99715024 +23 31 s31/1 -2762.73930966 +23 31 s31/3 -4528.00262345 +23 31 s31/6 -3396.31487831 +23 31 s31/8 -3130.10792911 +23 31 s31/10 -4470.28306039 +23 32 s32/1 -4537.19613397 +23 32 s32/3 -4949.68831805 +23 32 s32/6 -4004.08246528 +23 32 s32/8 -4583.91867321 +23 32 s32/10 -3911.71276254 +23 35 s35/1 -3178.23727789 +23 35 s35/3 -4169.62277632 +23 35 s35/6 -3801.6848293 +23 35 s35/8 -3398.16793702 +23 35 s35/10 -3728.28743801 +23 37 s37/1 -5014.94351534 +23 37 s37/3 -5172.0063639 +23 37 s37/6 -5156.52421938 +23 37 s37/8 -4788.3829074 +23 37 s37/10 -5104.5348761 +23 38 s38/1 -1880.96858467 +23 38 s38/3 -2573.59823519 +23 38 s38/6 -1714.16722371 +23 38 s38/8 -2167.66742222 +23 38 s38/10 -1955.26863906 +23 40 s40/1 -3445.08418791 +23 40 s40/3 -3641.3180666 +23 40 s40/6 -3453.03156199 +23 40 s40/8 -3560.2184106 +23 40 s40/10 -3218.5535354 +25 3 s3/1 -2329.44030111 +25 3 s3/3 -2840.82679839 +25 3 s3/6 -2617.51310471 +25 3 s3/8 -2589.40533444 +25 3 s3/10 -3131.96090955 +25 4 s4/1 -2341.42599985 +25 4 s4/3 -2138.24343048 +25 4 s4/6 -2588.53367105 +25 4 s4/8 -2112.51058765 +25 4 s4/10 -3405.71001087 +25 7 s7/1 -4405.81440483 +25 7 s7/3 -4315.60479214 +25 7 s7/6 -4059.91436578 +25 7 s7/8 -4347.02735436 +25 7 s7/10 -4085.14799994 +25 8 s8/1 -3964.4355233 +25 8 s8/3 -3848.83262637 +25 8 s8/6 -3972.95654206 +25 8 s8/8 -3711.48917503 +25 8 s8/10 -3858.17849827 +25 9 s9/1 -3333.50104347 +25 9 s9/3 -3143.60390272 +25 9 s9/6 -3055.56925526 +25 9 s9/8 -2993.60713502 +25 9 s9/10 -3472.42961378 +25 13 s13/1 -2481.39989591 +25 13 s13/3 -3310.77716289 +25 13 s13/6 -2880.99606547 +25 13 s13/8 -2766.27796515 +25 13 s13/10 -2532.27222606 +25 15 s15/1 -3279.68222934 +25 15 s15/3 -3377.99742875 +25 15 s15/6 -3150.34334081 +25 15 s15/8 -3544.02251423 +25 15 s15/10 -2544.41193594 +25 18 s18/1 -3428.56105084 +25 18 s18/3 -2314.42745202 +25 18 s18/6 -2886.36192677 +25 18 s18/8 -2545.05739956 +25 18 s18/10 -2908.12292822 +25 19 s19/1 -3343.86910217 +25 19 s19/3 -3543.28909774 +25 19 s19/6 -3365.40096021 +25 19 s19/8 -3876.75857854 +25 19 s19/10 -3189.69426311 +25 22 s22/1 -4304.68450911 +25 22 s22/3 -4163.02903211 +25 22 s22/6 -4817.65197756 +25 22 s22/8 -4451.18722857 +25 22 s22/10 -4471.29497265 +25 23 s23/1 -3794.61832674 +25 23 s23/3 -4168.8206655 +25 23 s23/6 -3523.84366372 +25 23 s23/8 -4313.06370365 +25 23 s23/10 -3608.02088704 +25 25 s25/1 -1838.60862847 +25 25 s25/3 -1782.56863456 +25 25 s25/6 -1216.40330853 +25 25 s25/8 -1750.899971 +25 25 s25/10 -1838.89845752 +25 28 s28/1 -3634.10212113 +25 28 s28/3 -3424.76087525 +25 28 s28/6 -3470.36152622 +25 28 s28/8 -3840.14976053 +25 28 s28/10 -3294.02273488 +25 30 s30/1 -3732.82801593 +25 30 s30/3 -4034.50397355 +25 30 s30/6 -3895.80456991 +25 30 s30/8 -4159.03526867 +25 30 s30/10 -3659.54249067 +25 31 s31/1 -3770.18624237 +25 31 s31/3 -3487.74961013 +25 31 s31/6 -2903.11810446 +25 31 s31/8 -3406.07700979 +25 31 s31/10 -3491.37591069 +25 32 s32/1 -3090.8704628 +25 32 s32/3 -2982.2893244 +25 32 s32/6 -2928.50863376 +25 32 s32/8 -2970.6854678 +25 32 s32/10 -2948.27100708 +25 35 s35/1 -3170.61334149 +25 35 s35/3 -2696.64961689 +25 35 s35/6 -1972.04360821 +25 35 s35/8 -2161.00210149 +25 35 s35/10 -3099.22511213 +25 37 s37/1 -3605.089065 +25 37 s37/3 -3797.33965343 +25 37 s37/6 -3754.47967655 +25 37 s37/8 -3353.7051036 +25 37 s37/10 -3503.75382349 +25 38 s38/1 -3641.71938148 +25 38 s38/3 -3350.24606883 +25 38 s38/6 -3906.65418999 +25 38 s38/8 -3910.46997475 +25 38 s38/10 -3809.94789038 +25 40 s40/1 -2884.1708444 +25 40 s40/3 -3383.93941208 +25 40 s40/6 -2857.00240553 +25 40 s40/8 -2697.34629589 +25 40 s40/10 -2657.30514148 +28 3 s3/1 -3343.13203827 +28 3 s3/3 -3479.74879865 +28 3 s3/6 -3647.43620707 +28 3 s3/8 -3523.3625319 +28 3 s3/10 -3513.08010005 +28 4 s4/1 -3536.27254189 +28 4 s4/3 -3179.88974284 +28 4 s4/6 -3287.28292174 +28 4 s4/8 -3081.13132712 +28 4 s4/10 -4084.05996736 +28 7 s7/1 -4099.21523338 +28 7 s7/3 -4161.40756193 +28 7 s7/6 -3784.13515954 +28 7 s7/8 -4253.64258383 +28 7 s7/10 -3818.67816343 +28 8 s8/1 -4332.70279236 +28 8 s8/3 -4307.15653445 +28 8 s8/6 -4173.91805596 +28 8 s8/8 -4294.37274636 +28 8 s8/10 -4255.55759304 +28 9 s9/1 -4363.99319121 +28 9 s9/3 -4119.6475689 +28 9 s9/6 -4347.27499476 +28 9 s9/8 -4355.09835002 +28 9 s9/10 -4454.41667374 +28 13 s13/1 -3427.68004988 +28 13 s13/3 -3894.83224322 +28 13 s13/6 -3518.23779878 +28 13 s13/8 -3597.2422859 +28 13 s13/10 -3331.20191065 +28 15 s15/1 -2323.51302233 +28 15 s15/3 -2362.00431219 +28 15 s15/6 -2125.98012646 +28 15 s15/8 -3053.4200304 +28 15 s15/10 -3712.17094447 +28 18 s18/1 -4130.08684075 +28 18 s18/3 -3912.59060716 +28 18 s18/6 -3915.74148171 +28 18 s18/8 -3952.48281946 +28 18 s18/10 -4313.03277019 +28 19 s19/1 -2330.25832055 +28 19 s19/3 -2587.91598855 +28 19 s19/6 -2453.72496914 +28 19 s19/8 -2614.40674008 +28 19 s19/10 -2369.94510467 +28 22 s22/1 -3586.97324551 +28 22 s22/3 -3704.40336174 +28 22 s22/6 -4209.35570582 +28 22 s22/8 -3860.98889304 +28 22 s22/10 -3711.03609186 +28 23 s23/1 -4726.31138129 +28 23 s23/3 -4879.52411067 +28 23 s23/6 -4595.7550428 +28 23 s23/8 -4931.96090397 +28 23 s23/10 -4391.21594075 +28 25 s25/1 -3802.92084037 +28 25 s25/3 -3634.05810549 +28 25 s25/6 -3465.07743388 +28 25 s25/8 -3264.71440694 +28 25 s25/10 -3666.63727597 +28 28 s28/1 -2986.81952345 +28 28 s28/3 -3081.51548619 +28 28 s28/6 -2984.96527253 +28 28 s28/8 -3279.0341711 +28 28 s28/10 -2852.94390455 +28 30 s30/1 -4583.97997175 +28 30 s30/3 -4963.26130459 +28 30 s30/6 -4652.29130916 +28 30 s30/8 -4858.98844591 +28 30 s30/10 -4539.14989958 +28 31 s31/1 -4601.00652661 +28 31 s31/3 -3130.82374316 +28 31 s31/6 -3477.47758598 +28 31 s31/8 -4159.77114721 +28 31 s31/10 -3147.93322094 +28 32 s32/1 -3170.92803926 +28 32 s32/3 -3075.19829312 +28 32 s32/6 -2584.91437959 +28 32 s32/8 -2642.44907404 +28 32 s32/10 -2362.34409511 +28 35 s35/1 -4535.74623183 +28 35 s35/3 -3186.07643383 +28 35 s35/6 -3156.70592316 +28 35 s35/8 -3493.69792028 +28 35 s35/10 -3704.77841057 +28 37 s37/1 -3406.47248485 +28 37 s37/3 -3507.23804154 +28 37 s37/6 -2084.05575339 +28 37 s37/8 -1769.18045321 +28 37 s37/10 -3134.97429258 +28 38 s38/1 -4887.38217448 +28 38 s38/3 -4504.3661083 +28 38 s38/6 -5127.43366899 +28 38 s38/8 -4986.48662022 +28 38 s38/10 -4667.74987614 +28 40 s40/1 -3958.09669873 +28 40 s40/3 -4200.01409183 +28 40 s40/6 -4210.01283002 +28 40 s40/8 -3954.86517811 +28 40 s40/10 -4202.50025715 +30 3 s3/1 -3913.00733265 +30 3 s3/3 -4345.05141324 +30 3 s3/6 -4031.3020103 +30 3 s3/8 -4218.16474898 +30 3 s3/10 -4701.93820993 +30 4 s4/1 -3481.8768697 +30 4 s4/3 -3739.48900015 +30 4 s4/6 -4692.20061636 +30 4 s4/8 -3835.0624544 +30 4 s4/10 -4319.02602269 +30 7 s7/1 -4063.53450929 +30 7 s7/3 -4139.64880935 +30 7 s7/6 -4012.38820175 +30 7 s7/8 -3830.81385156 +30 7 s7/10 -4624.7437418 +30 8 s8/1 -4619.44653813 +30 8 s8/3 -4833.26913827 +30 8 s8/6 -5224.74104042 +30 8 s8/8 -4904.41346544 +30 8 s8/10 -4847.99263946 +30 9 s9/1 -2975.73424387 +30 9 s9/3 -3139.78450061 +30 9 s9/6 -3170.31878614 +30 9 s9/8 -3313.98776978 +30 9 s9/10 -3925.41954159 +30 13 s13/1 -5798.30896077 +30 13 s13/3 -6244.65250104 +30 13 s13/6 -5926.20292869 +30 13 s13/8 -6036.52752935 +30 13 s13/10 -5783.59604252 +30 15 s15/1 -3763.88171871 +30 15 s15/3 -3689.04823233 +30 15 s15/6 -3919.43102002 +30 15 s15/8 -3318.33723667 +30 15 s15/10 -3002.84890822 +30 18 s18/1 -5962.32886757 +30 18 s18/3 -5524.26290721 +30 18 s18/6 -5772.92084517 +30 18 s18/8 -5592.16865828 +30 18 s18/10 -5499.46776906 +30 19 s19/1 -5471.7855931 +30 19 s19/3 -6047.05163418 +30 19 s19/6 -5699.94451026 +30 19 s19/8 -5979.04374791 +30 19 s19/10 -5254.62480286 +30 22 s22/1 -3146.86740793 +30 22 s22/3 -2879.21295297 +30 22 s22/6 -3061.91597599 +30 22 s22/8 -3258.40420461 +30 22 s22/10 -3761.46166507 +30 23 s23/1 -3375.6338731 +30 23 s23/3 -2978.92747129 +30 23 s23/6 -2705.31036504 +30 23 s23/8 -3598.22134369 +30 23 s23/10 -3394.24856588 +30 25 s25/1 -4041.15819454 +30 25 s25/3 -4297.37052267 +30 25 s25/6 -4308.49765575 +30 25 s25/8 -4652.21834027 +30 25 s25/10 -4336.26693869 +30 28 s28/1 -6076.53361463 +30 28 s28/3 -5816.51880993 +30 28 s28/6 -5833.38920666 +30 28 s28/8 -6053.47393294 +30 28 s28/10 -5992.22370309 +30 30 s30/1 -1695.33118524 +30 30 s30/3 -1608.11413011 +30 30 s30/6 -1499.75038695 +30 30 s30/8 -825.90900339 +30 30 s30/10 -1437.95656679 +30 31 s31/1 -2356.43835638 +30 31 s31/3 -4055.42384883 +30 31 s31/6 -2919.51134664 +30 31 s31/8 -2633.93536299 +30 31 s31/10 -4006.795115 +30 32 s32/1 -5481.03063405 +30 32 s32/3 -5526.14236159 +30 32 s32/6 -4775.53057542 +30 32 s32/8 -5291.11139842 +30 32 s32/10 -4528.57215715 +30 35 s35/1 -3640.3288671 +30 35 s35/3 -4208.79565148 +30 35 s35/6 -4518.29965451 +30 35 s35/8 -4062.94446209 +30 35 s35/10 -4649.9587983 +30 37 s37/1 -5984.78222918 +30 37 s37/3 -6136.4322262 +30 37 s37/6 -5474.86705904 +30 37 s37/8 -4947.21766845 +30 37 s37/10 -6085.5670564 +30 38 s38/1 -3028.99255218 +30 38 s38/3 -2918.55614479 +30 38 s38/6 -3039.57294451 +30 38 s38/8 -3207.95262708 +30 38 s38/10 -2745.00190154 +30 40 s40/1 -4634.95426544 +30 40 s40/3 -5014.31076122 +30 40 s40/6 -4476.16998797 +30 40 s40/8 -4603.99325218 +30 40 s40/10 -4357.37992428 +31 3 s3/1 -3294.69415772 +31 3 s3/3 -3557.88055283 +31 3 s3/6 -3617.60373216 +31 3 s3/8 -3736.1793475 +31 3 s3/10 -4055.32742762 +31 4 s4/1 -3043.46778458 +31 4 s4/3 -3023.23998174 +31 4 s4/6 -3728.16930154 +31 4 s4/8 -2978.33707274 +31 4 s4/10 -3803.69514613 +31 7 s7/1 -3908.23309344 +31 7 s7/3 -3946.16493716 +31 7 s7/6 -3857.43168016 +31 7 s7/8 -4039.50737097 +31 7 s7/10 -3910.4052828 +31 8 s8/1 -4523.85343244 +31 8 s8/3 -4652.36177247 +31 8 s8/6 -4903.43793328 +31 8 s8/8 -4586.26265549 +31 8 s8/10 -4635.5875901 +31 9 s9/1 -3171.57454251 +31 9 s9/3 -3068.93748052 +31 9 s9/6 -3304.14498655 +31 9 s9/8 -3462.79992375 +31 9 s9/10 -3660.99143487 +31 13 s13/1 -4425.26237254 +31 13 s13/3 -4887.90456047 +31 13 s13/6 -4543.10357587 +31 13 s13/8 -4634.50875902 +31 13 s13/10 -4423.75586687 +31 15 s15/1 -2653.96880799 +31 15 s15/3 -2674.72545803 +31 15 s15/6 -2745.06735481 +31 15 s15/8 -2346.42288294 +31 15 s15/10 -2495.08709261 +31 18 s18/1 -4789.84400569 +31 18 s18/3 -4304.64348271 +31 18 s18/6 -4618.95118142 +31 18 s18/8 -4359.95159701 +31 18 s18/10 -4574.80266252 +31 19 s19/1 -3802.18582905 +31 19 s19/3 -4279.32466407 +31 19 s19/6 -4223.2929879 +31 19 s19/8 -4694.10862641 +31 19 s19/10 -3880.49209192 +31 22 s22/1 -2743.51602101 +31 22 s22/3 -2593.27686403 +31 22 s22/6 -3133.32442951 +31 22 s22/8 -2997.20411043 +31 22 s22/10 -3149.36484519 +31 23 s23/1 -3905.79070148 +31 23 s23/3 -3679.30549599 +31 23 s23/6 -3307.17298559 +31 23 s23/8 -4001.95959155 +31 23 s23/10 -3759.27839067 +31 25 s25/1 -3366.66588954 +31 25 s25/3 -3515.54391224 +31 25 s25/6 -3318.17438283 +31 25 s25/8 -3615.32411462 +31 25 s25/10 -3476.17240873 +31 28 s28/1 -4713.20512491 +31 28 s28/3 -4579.26031206 +31 28 s28/6 -4544.75232505 +31 28 s28/8 -4801.17980935 +31 28 s28/10 -4593.27737246 +31 30 s30/1 -2674.14867654 +31 30 s30/3 -3005.96043866 +31 30 s30/6 -2829.01846893 +31 30 s30/8 -2483.52177124 +31 30 s30/10 -2549.22458936 +31 31 s31/1 -2724.2754152 +31 31 s31/3 -1857.41403824 +31 31 s31/6 -1973.44433813 +31 31 s31/8 -2513.49716235 +31 31 s31/10 -1820.97103732 +31 32 s32/1 -3973.23686415 +31 32 s32/3 -3943.5738161 +31 32 s32/6 -3606.32094631 +31 32 s32/8 -3785.05453983 +31 32 s32/10 -3356.11317668 +31 35 s35/1 -3137.66816407 +31 35 s35/3 -2852.55321543 +31 35 s35/6 -3241.79608545 +31 35 s35/8 -3022.29091214 +31 35 s35/10 -3552.58870649 +31 37 s37/1 -4703.79279182 +31 37 s37/3 -4833.07734018 +31 37 s37/6 -3907.52926699 +31 37 s37/8 -3487.72961561 +31 37 s37/10 -4719.02596974 +31 38 s38/1 -3804.69487163 +31 38 s38/3 -3545.79490704 +31 38 s38/6 -3960.3768924 +31 38 s38/8 -3950.49614872 +31 38 s38/10 -3699.42709121 +31 40 s40/1 -3886.98211706 +31 40 s40/3 -4191.18238079 +31 40 s40/6 -4066.15707928 +31 40 s40/8 -3980.62440027 +31 40 s40/10 -3984.41323747 +32 3 s3/1 -3481.44865816 +32 3 s3/3 -3595.59422267 +32 3 s3/6 -3340.32436965 +32 3 s3/8 -3530.55916379 +32 3 s3/10 -3733.86113116 +32 4 s4/1 -3415.99834875 +32 4 s4/3 -3352.85775891 +32 4 s4/6 -3257.52441401 +32 4 s4/8 -3216.48660203 +32 4 s4/10 -3879.77419768 +32 7 s7/1 -3996.80171914 +32 7 s7/3 -3800.22323738 +32 7 s7/6 -3599.63763993 +32 7 s7/8 -4023.09287769 +32 7 s7/10 -3723.8961306 +32 8 s8/1 -3927.44454704 +32 8 s8/3 -3676.39887399 +32 8 s8/6 -3720.73898374 +32 8 s8/8 -3447.80882094 +32 8 s8/10 -3643.68488641 +32 9 s9/1 -4359.49267419 +32 9 s9/3 -4222.77898444 +32 9 s9/6 -4216.79980363 +32 9 s9/8 -4140.4437327 +32 9 s9/10 -4450.82974639 +32 13 s13/1 -3308.04268181 +32 13 s13/3 -3580.13299752 +32 13 s13/6 -3159.09017895 +32 13 s13/8 -3283.76704583 +32 13 s13/10 -3080.31334708 +32 15 s15/1 -2398.62231509 +32 15 s15/3 -2503.02526136 +32 15 s15/6 -2209.21900396 +32 15 s15/8 -3036.37839137 +32 15 s15/10 -3490.34409742 +32 18 s18/1 -3303.33083543 +32 18 s18/3 -2913.41746349 +32 18 s18/6 -3008.40792755 +32 18 s18/8 -2873.03663611 +32 18 s18/10 -3197.93494951 +32 19 s19/1 -2619.90662239 +32 19 s19/3 -2734.07164667 +32 19 s19/6 -3126.62695763 +32 19 s19/8 -2986.49752003 +32 19 s19/10 -2953.1627146 +32 22 s22/1 -4760.38387621 +32 22 s22/3 -4753.34213918 +32 22 s22/6 -5278.21922142 +32 22 s22/8 -5031.68731869 +32 22 s22/10 -5008.58954608 +32 23 s23/1 -4424.88536858 +32 23 s23/3 -4720.8973672 +32 23 s23/6 -4350.28166904 +32 23 s23/8 -4771.40699913 +32 23 s23/10 -4202.95712702 +32 25 s25/1 -3402.83132332 +32 25 s25/3 -3225.41484415 +32 25 s25/6 -3027.31174396 +32 25 s25/8 -3207.78734977 +32 25 s25/10 -3260.90211767 +32 28 s28/1 -4262.18547504 +32 28 s28/3 -4313.88973205 +32 28 s28/6 -4300.78708628 +32 28 s28/8 -4384.79956853 +32 28 s28/10 -3808.79171646 +32 30 s30/1 -4586.57713103 +32 30 s30/3 -4857.61993231 +32 30 s30/6 -4608.97429863 +32 30 s30/8 -4894.14196906 +32 30 s30/10 -4530.84126705 +32 31 s31/1 -4965.28305801 +32 31 s31/3 -3232.97665263 +32 31 s31/6 -4109.43022166 +32 31 s31/8 -4700.69670199 +32 31 s31/10 -3158.6222623 +32 32 s32/1 -1400.04142319 +32 32 s32/3 -1471.63862249 +32 32 s32/6 -1516.39381803 +32 32 s32/8 -1179.08179137 +32 32 s32/10 -1606.25051683 +32 35 s35/1 -3998.48265398 +32 35 s35/3 -3357.37138441 +32 35 s35/6 -2802.69294465 +32 35 s35/8 -3137.78371976 +32 35 s35/10 -3394.4396583 +32 37 s37/1 -4383.78071256 +32 37 s37/3 -4454.22960435 +32 37 s37/6 -3651.92757765 +32 37 s37/8 -3432.14617407 +32 37 s37/10 -4075.51765463 +32 38 s38/1 -4684.65223915 +32 38 s38/3 -4481.2456882 +32 38 s38/6 -4819.61377814 +32 38 s38/8 -4752.66048128 +32 38 s38/10 -4679.25783168 +32 40 s40/1 -3713.20737165 +32 40 s40/3 -3993.88791391 +32 40 s40/6 -3706.94187692 +32 40 s40/8 -3660.09483497 +32 40 s40/10 -3638.98252641 +35 3 s3/1 -2629.99743718 +35 3 s3/3 -2728.48998423 +35 3 s3/6 -2929.77990244 +35 3 s3/8 -2737.72206345 +35 3 s3/10 -2949.71829906 +35 4 s4/1 -2601.23631638 +35 4 s4/3 -2396.55979124 +35 4 s4/6 -2546.29151109 +35 4 s4/8 -2339.13926292 +35 4 s4/10 -3324.81878496 +35 7 s7/1 -3913.13111744 +35 7 s7/3 -3876.07567135 +35 7 s7/6 -3672.47456635 +35 7 s7/8 -3980.36207192 +35 7 s7/10 -3347.45454423 +35 8 s8/1 -4038.67376066 +35 8 s8/3 -3806.1353599 +35 8 s8/6 -3898.74319573 +35 8 s8/8 -3816.06122627 +35 8 s8/10 -3849.60319515 +35 9 s9/1 -3502.24046593 +35 9 s9/3 -3385.56018459 +35 9 s9/6 -3406.93863815 +35 9 s9/8 -3107.60749355 +35 9 s9/10 -3389.4402753 +35 13 s13/1 -2624.28110155 +35 13 s13/3 -2765.94302571 +35 13 s13/6 -2543.86600788 +35 13 s13/8 -2650.98496007 +35 13 s13/10 -2343.05172093 +35 15 s15/1 -2993.10453694 +35 15 s15/3 -3076.91109514 +35 15 s15/6 -2861.95651434 +35 15 s15/8 -3031.66118545 +35 15 s15/10 -2109.33741856 +35 18 s18/1 -3035.49730933 +35 18 s18/3 -2313.33089252 +35 18 s18/6 -2511.11161463 +35 18 s18/8 -2454.69728093 +35 18 s18/10 -2654.99253428 +35 19 s19/1 -3399.99579481 +35 19 s19/3 -3545.84878311 +35 19 s19/6 -3342.75380654 +35 19 s19/8 -3644.82417017 +35 19 s19/10 -3342.46548391 +35 22 s22/1 -4144.58588782 +35 22 s22/3 -4013.39977843 +35 22 s22/6 -4569.5954763 +35 22 s22/8 -4253.70722731 +35 22 s22/10 -4172.92650511 +35 23 s23/1 -3879.24107414 +35 23 s23/3 -4182.86068514 +35 23 s23/6 -3826.88461692 +35 23 s23/8 -4164.38029282 +35 23 s23/10 -3700.40739818 +35 25 s25/1 -2353.51220217 +35 25 s25/3 -2351.75940108 +35 25 s25/6 -2215.93558444 +35 25 s25/8 -2281.75100329 +35 25 s25/10 -2396.53146639 +35 28 s28/1 -3242.62293578 +35 28 s28/3 -3145.54405433 +35 28 s28/6 -3161.69901133 +35 28 s28/8 -3460.48280145 +35 28 s28/10 -3130.20867157 +35 30 s30/1 -3719.69872843 +35 30 s30/3 -4033.57701225 +35 30 s30/6 -3835.96540364 +35 30 s30/8 -4213.43393094 +35 30 s30/10 -3737.83513544 +35 31 s31/1 -3637.87436761 +35 31 s31/3 -3257.6985864 +35 31 s31/6 -2823.29980411 +35 31 s31/8 -3301.15243938 +35 31 s31/10 -3281.1310619 +35 32 s32/1 -2982.21528736 +35 32 s32/3 -3153.57772893 +35 32 s32/6 -2910.44123827 +35 32 s32/8 -2934.4008954 +35 32 s32/10 -2908.80485422 +35 35 s35/1 -3027.39385142 +35 35 s35/3 -1977.74812817 +35 35 s35/6 -1777.94978034 +35 35 s35/8 -1726.81146917 +35 35 s35/10 -2337.52098854 +35 37 s37/1 -3083.80116802 +35 37 s37/3 -3175.91404615 +35 37 s37/6 -3564.29392185 +35 37 s37/8 -3242.77652296 +35 37 s37/10 -3104.98121563 +35 38 s38/1 -3949.35061046 +35 38 s38/3 -3787.29739957 +35 38 s38/6 -4217.60402972 +35 38 s38/8 -3878.23065452 +35 38 s38/10 -3938.91071819 +35 40 s40/1 -2492.86221414 +35 40 s40/3 -2685.54559886 +35 40 s40/6 -2855.14417866 +35 40 s40/8 -2565.77623868 +35 40 s40/10 -3047.82986247 +37 3 s3/1 -3347.73193542 +37 3 s3/3 -3386.29089298 +37 3 s3/6 -4145.74220476 +37 3 s3/8 -3841.49225099 +37 3 s3/10 -3708.19810549 +37 4 s4/1 -3992.94431208 +37 4 s4/3 -3674.34102399 +37 4 s4/6 -4056.12617671 +37 4 s4/8 -3687.67324754 +37 4 s4/10 -4723.12608509 +37 7 s7/1 -4671.00523462 +37 7 s7/3 -4852.12652774 +37 7 s7/6 -4358.69169597 +37 7 s7/8 -4761.07266948 +37 7 s7/10 -4244.93718081 +37 8 s8/1 -4888.13275433 +37 8 s8/3 -5222.4471334 +37 8 s8/6 -4989.53297198 +37 8 s8/8 -5380.61437698 +37 8 s8/10 -5245.10245345 +37 9 s9/1 -4461.97197329 +37 9 s9/3 -4317.86362434 +37 9 s9/6 -4763.27936789 +37 9 s9/8 -4706.75225409 +37 9 s9/10 -4762.90492801 +37 13 s13/1 -2705.98850595 +37 13 s13/3 -3492.47406384 +37 13 s13/6 -3208.28121704 +37 13 s13/8 -3204.92184035 +37 13 s13/10 -2846.81650282 +37 15 s15/1 -3475.5819192 +37 15 s15/3 -3500.44254169 +37 15 s15/6 -3253.21773129 +37 15 s15/8 -3869.45696446 +37 15 s15/10 -3735.74466224 +37 18 s18/1 -4248.18462448 +37 18 s18/3 -3835.2689915 +37 18 s18/6 -3988.82120835 +37 18 s18/8 -4000.35744946 +37 18 s18/10 -4415.8952017 +37 19 s19/1 -3428.65549423 +37 19 s19/3 -3334.64597979 +37 19 s19/6 -2745.93723939 +37 19 s19/8 -3126.11526158 +37 19 s19/10 -3246.85900974 +37 22 s22/1 -3802.08835708 +37 22 s22/3 -3898.95474126 +37 22 s22/6 -4369.19801658 +37 22 s22/8 -3907.1245176 +37 22 s22/10 -3607.64737813 +37 23 s23/1 -5205.00445868 +37 23 s23/3 -5168.54275138 +37 23 s23/6 -4980.94796855 +37 23 s23/8 -5350.01537911 +37 23 s23/10 -4959.9234081 +37 25 s25/1 -4059.25815544 +37 25 s25/3 -3953.32278429 +37 25 s25/6 -3640.25144807 +37 25 s25/8 -3478.25513417 +37 25 s25/10 -3985.58588488 +37 28 s28/1 -1770.3525039 +37 28 s28/3 -1862.35119548 +37 28 s28/6 -1796.32858027 +37 28 s28/8 -2230.13715335 +37 28 s28/10 -1843.95641805 +37 30 s30/1 -5135.49776734 +37 30 s30/3 -5424.60823062 +37 30 s30/6 -5200.91129295 +37 30 s30/8 -5356.54450147 +37 30 s30/10 -5130.36181483 +37 31 s31/1 -4813.52373089 +37 31 s31/3 -3874.07295501 +37 31 s31/6 -3843.42289871 +37 31 s31/8 -4411.64509181 +37 31 s31/10 -3863.04735893 +37 32 s32/1 -3947.16038218 +37 32 s32/3 -3669.46229069 +37 32 s32/6 -3563.89629466 +37 32 s32/8 -3431.84465293 +37 32 s32/10 -3416.12471004 +37 35 s35/1 -4310.62579244 +37 35 s35/3 -2845.25367679 +37 35 s35/6 -3678.21231785 +37 35 s35/8 -3958.77686193 +37 35 s35/10 -3708.69894331 +37 37 s37/1 -2026.73809469 +37 37 s37/3 -2076.5065985 +37 37 s37/6 -1322.12745022 +37 37 s37/8 -1420.40271347 +37 37 s37/10 -1799.09150143 +37 38 s38/1 -5194.52366806 +37 38 s38/3 -4756.94476628 +37 38 s38/6 -5457.50111132 +37 38 s38/8 -5315.70013416 +37 38 s38/10 -4868.01182272 +37 40 s40/1 -3517.01393705 +37 40 s40/3 -4115.52328612 +37 40 s40/6 -3826.76525207 +37 40 s40/8 -3550.5571365 +37 40 s40/10 -3838.17065346 +38 3 s3/1 -2500.66524809 +38 3 s3/3 -3113.76487532 +38 3 s3/6 -2268.34645822 +38 3 s3/8 -2518.65944776 +38 3 s3/10 -3312.4448462 +38 4 s4/1 -2358.3472841 +38 4 s4/3 -2820.58463101 +38 4 s4/6 -3767.53975525 +38 4 s4/8 -2905.51038405 +38 4 s4/10 -3364.95835537 +38 7 s7/1 -3079.51500683 +38 7 s7/3 -2995.94686187 +38 7 s7/6 -2728.64006669 +38 7 s7/8 -2632.18971995 +38 7 s7/10 -3580.2942623 +38 8 s8/1 -3401.48475841 +38 8 s8/3 -3170.84565396 +38 8 s8/6 -3565.07308101 +38 8 s8/8 -3542.05330799 +38 8 s8/10 -3205.57917872 +38 9 s9/1 -2443.45811206 +38 9 s9/3 -2624.20317848 +38 9 s9/6 -2452.88289599 +38 9 s9/8 -2045.23427053 +38 9 s9/10 -3276.71105312 +38 13 s13/1 -4721.97426652 +38 13 s13/3 -5226.71057651 +38 13 s13/6 -4680.83782604 +38 13 s13/8 -4765.99705531 +38 13 s13/10 -4423.14289953 +38 15 s15/1 -3688.28384289 +38 15 s15/3 -3598.51972277 +38 15 s15/6 -3768.57386495 +38 15 s15/8 -3455.04650083 +38 15 s15/10 -2655.02750604 +38 18 s18/1 -4745.50875736 +38 18 s18/3 -4292.87295517 +38 18 s18/6 -4286.22959369 +38 18 s18/8 -4323.9459001 +38 18 s18/10 -4070.24822599 +38 19 s19/1 -5065.02813215 +38 19 s19/3 -5596.88172312 +38 19 s19/6 -5112.50499266 +38 19 s19/8 -5196.17038292 +38 19 s19/10 -4680.31338835 +38 22 s22/1 -4021.19787287 +38 22 s22/3 -3786.51071329 +38 22 s22/6 -4126.76659422 +38 22 s22/8 -4065.28029675 +38 22 s22/10 -4500.77994993 +38 23 s23/1 -1661.15610539 +38 23 s23/3 -3004.62043703 +38 23 s23/6 -2592.15772151 +38 23 s23/8 -2839.53533334 +38 23 s23/10 -1886.64429816 +38 25 s25/1 -2759.63230835 +38 25 s25/3 -3053.91603984 +38 25 s25/6 -3286.6060079 +38 25 s25/8 -3919.08978822 +38 25 s25/10 -3123.42430915 +38 28 s28/1 -4986.3941653 +38 28 s28/3 -4693.8398904 +38 28 s28/6 -4733.98872901 +38 28 s28/8 -5112.93431814 +38 28 s28/10 -4951.60499646 +38 30 s30/1 -2171.70657427 +38 30 s30/3 -2248.55987093 +38 30 s30/6 -2181.24702757 +38 30 s30/8 -3093.05158571 +38 30 s30/10 -2149.11586703 +38 31 s31/1 -2676.45733009 +38 31 s31/3 -4915.56732116 +38 31 s31/6 -3152.65508137 +38 31 s31/8 -2864.95806167 +38 31 s31/10 -4942.57718181 +38 32 s32/1 -4855.40392521 +38 32 s32/3 -5162.90276935 +38 32 s32/6 -3858.1984399 +38 32 s32/8 -4687.73273849 +38 32 s32/10 -3771.2787541 +38 35 s35/1 -3397.84237105 +38 35 s35/3 -4119.31301927 +38 35 s35/6 -3394.96054168 +38 35 s35/8 -3015.43872493 +38 35 s35/10 -4064.95202992 +38 37 s37/1 -4882.73064872 +38 37 s37/3 -5081.54156869 +38 37 s37/6 -5186.66678655 +38 37 s37/8 -4640.2911261 +38 37 s37/10 -4932.9113395 +38 38 s38/1 -1436.2690717 +38 38 s38/3 -1193.10987941 +38 38 s38/6 -1871.70903439 +38 38 s38/8 -1502.77950363 +38 38 s38/10 -1295.39466213 +38 40 s40/1 -3610.15958833 +38 40 s40/3 -3930.3899188 +38 40 s40/6 -3367.88066228 +38 40 s40/8 -3469.37561895 +38 40 s40/10 -3436.14514204 +40 3 s3/1 -2651.09965589 +40 3 s3/3 -2683.04351464 +40 3 s3/6 -2445.93813943 +40 3 s3/8 -2073.66669064 +40 3 s3/10 -2813.14996979 +40 4 s4/1 -2568.59239584 +40 4 s4/3 -2532.61350347 +40 4 s4/6 -2594.61908498 +40 4 s4/8 -2621.96322247 +40 4 s4/10 -3338.43480092 +40 7 s7/1 -3678.20163099 +40 7 s7/3 -3596.8945058 +40 7 s7/6 -3396.75831689 +40 7 s7/8 -3567.20188339 +40 7 s7/10 -3221.24213788 +40 8 s8/1 -3715.39341458 +40 8 s8/3 -3571.88906273 +40 8 s8/6 -3730.13258897 +40 8 s8/8 -3603.12267398 +40 8 s8/10 -3590.12354748 +40 9 s9/1 -3548.4965001 +40 9 s9/3 -3472.79256194 +40 9 s9/6 -2863.6915347 +40 9 s9/8 -2720.70479404 +40 9 s9/10 -3294.53578043 +40 13 s13/1 -2815.20644872 +40 13 s13/3 -2764.01526588 +40 13 s13/6 -2694.45585779 +40 13 s13/8 -2500.66028557 +40 13 s13/10 -2249.42220386 +40 15 s15/1 -3607.07793083 +40 15 s15/3 -3681.10792076 +40 15 s15/6 -3516.22845085 +40 15 s15/8 -3790.99726558 +40 15 s15/10 -2371.56146064 +40 18 s18/1 -2885.25365973 +40 18 s18/3 -1730.26525228 +40 18 s18/6 -1920.5352865 +40 18 s18/8 -2041.83010019 +40 18 s18/10 -1902.29679874 +40 19 s19/1 -4146.34040048 +40 19 s19/3 -4291.00986689 +40 19 s19/6 -4104.42545501 +40 19 s19/8 -4078.28359243 +40 19 s19/10 -3964.82241087 +40 22 s22/1 -4923.93362995 +40 22 s22/3 -4790.15479765 +40 22 s22/6 -5163.44878234 +40 22 s22/8 -5045.57023204 +40 22 s22/10 -5077.34842893 +40 23 s23/1 -3195.09963137 +40 23 s23/3 -4083.00238199 +40 23 s23/6 -3343.03813699 +40 23 s23/8 -3692.5758183 +40 23 s23/10 -2921.14528812 +40 25 s25/1 -2474.2456049 +40 25 s25/3 -2495.90369101 +40 25 s25/6 -2700.66256782 +40 25 s25/8 -2093.23218401 +40 25 s25/10 -2753.63733789 +40 28 s28/1 -3607.32239622 +40 28 s28/3 -3523.64440717 +40 28 s28/6 -3508.00347721 +40 28 s28/8 -3794.96537331 +40 28 s28/10 -3545.02350553 +40 30 s30/1 -4117.68401116 +40 30 s30/3 -4318.14358145 +40 30 s30/6 -3970.30405567 +40 30 s30/8 -4663.03394225 +40 30 s30/10 -4114.2734629 +40 31 s31/1 -3883.11730819 +40 31 s31/3 -4347.05405545 +40 31 s31/6 -3585.00166747 +40 31 s31/8 -3752.95802879 +40 31 s31/10 -4361.37878865 +40 32 s32/1 -3198.90321628 +40 32 s32/3 -3536.7907758 +40 32 s32/6 -3207.0830193 +40 32 s32/8 -3269.19701762 +40 32 s32/10 -3209.67847964 +40 35 s35/1 -3144.80178138 +40 35 s35/3 -2695.41443799 +40 35 s35/6 -2639.71050693 +40 35 s35/8 -2324.91676937 +40 35 s35/10 -2033.60969477 +40 37 s37/1 -3242.39681112 +40 37 s37/3 -3311.51818371 +40 37 s37/6 -4308.81184137 +40 37 s37/8 -3954.90331952 +40 37 s37/10 -3302.59396222 +40 38 s38/1 -3399.74494682 +40 38 s38/3 -3670.11719236 +40 38 s38/6 -3704.4046877 +40 38 s38/8 -3711.69159941 +40 38 s38/10 -3659.77792774 +40 40 s40/1 -2186.09198446 +40 40 s40/3 -2228.13430956 +40 40 s40/6 -2470.78602967 +40 40 s40/8 -2214.25145046 +40 40 s40/10 -2276.02148295 diff --git a/bob/bio/base/test/data/scores-cmc-5col.txt b/bob/bio/base/test/data/scores-cmc-5col.txt new file mode 100644 index 0000000000000000000000000000000000000000..f69a0a26dffc648dc131d2093dddbd2588289186 --- /dev/null +++ b/bob/bio/base/test/data/scores-cmc-5col.txt @@ -0,0 +1,2000 @@ +3 s3 3 s3/1 -1379.79268746 +3 s3 3 s3/3 -1634.53276051 +3 s3 3 s3/6 -1727.90866176 +3 s3 3 s3/8 -1330.68401315 +3 s3 3 s3/10 -1912.77343391 +3 s3 4 s4/1 -1746.88596714 +3 s3 4 s4/3 -1613.06319303 +3 s3 4 s4/6 -2313.24329277 +3 s3 4 s4/8 -1591.98392217 +3 s3 4 s4/10 -2730.9754808 +3 s3 7 s7/1 -3460.44008764 +3 s3 7 s7/3 -3433.49050371 +3 s3 7 s7/6 -3089.89562483 +3 s3 7 s7/8 -3432.42457034 +3 s3 7 s7/10 -3079.0440811 +3 s3 8 s8/1 -3620.2592394 +3 s3 8 s8/3 -3269.98024589 +3 s3 8 s8/6 -3358.21797555 +3 s3 8 s8/8 -3387.03907938 +3 s3 8 s8/10 -3171.50666852 +3 s3 9 s9/1 -2811.95946617 +3 s3 9 s9/3 -2664.59585669 +3 s3 9 s9/6 -2656.05911704 +3 s3 9 s9/8 -2443.67278587 +3 s3 9 s9/10 -2850.31782429 +3 s3 13 s13/1 -2946.82573528 +3 s3 13 s13/3 -3583.79672567 +3 s3 13 s13/6 -2963.54066016 +3 s3 13 s13/8 -2868.46385067 +3 s3 13 s13/10 -2538.48690592 +3 s3 15 s15/1 -3173.69053082 +3 s3 15 s15/3 -3178.53876882 +3 s3 15 s15/6 -3111.42098722 +3 s3 15 s15/8 -3329.41061343 +3 s3 15 s15/10 -2596.58956879 +3 s3 18 s18/1 -3182.79708708 +3 s3 18 s18/3 -2614.69595605 +3 s3 18 s18/6 -2706.60809944 +3 s3 18 s18/8 -2840.19223113 +3 s3 18 s18/10 -2862.66900744 +3 s3 19 s19/1 -3536.77408534 +3 s3 19 s19/3 -4027.07052594 +3 s3 19 s19/6 -3672.1595268 +3 s3 19 s19/8 -3986.46152677 +3 s3 19 s19/10 -3253.32219871 +3 s3 22 s22/1 -4010.21487048 +3 s3 22 s22/3 -3830.02378375 +3 s3 22 s22/6 -4432.88810546 +3 s3 22 s22/8 -4157.95710081 +3 s3 22 s22/10 -4366.73686546 +3 s3 23 s23/1 -3053.33185632 +3 s3 23 s23/3 -3919.97013765 +3 s3 23 s23/6 -3288.54921504 +3 s3 23 s23/8 -3445.7429271 +3 s3 23 s23/10 -2728.4009081 +3 s3 25 s25/1 -2077.78964037 +3 s3 25 s25/3 -1996.27706821 +3 s3 25 s25/6 -2158.13414247 +3 s3 25 s25/8 -2365.446406 +3 s3 25 s25/10 -2113.26873798 +3 s3 28 s28/1 -3442.83435448 +3 s3 28 s28/3 -3163.25423353 +3 s3 28 s28/6 -3227.02394654 +3 s3 28 s28/8 -3383.5929893 +3 s3 28 s28/10 -3270.67275578 +3 s3 30 s30/1 -3399.50034429 +3 s3 30 s30/3 -3755.26703911 +3 s3 30 s30/6 -3390.40001552 +3 s3 30 s30/8 -4088.11071666 +3 s3 30 s30/10 -3448.70029605 +3 s3 31 s31/1 -3317.91933517 +3 s3 31 s31/3 -4129.53432195 +3 s3 31 s31/6 -2703.85344626 +3 s3 31 s31/8 -3028.36256979 +3 s3 31 s31/10 -4117.12107523 +3 s3 32 s32/1 -3451.07982123 +3 s3 32 s32/3 -3659.08758621 +3 s3 32 s32/6 -2912.5121953 +3 s3 32 s32/8 -3239.29507593 +3 s3 32 s32/10 -2816.61664649 +3 s3 35 s35/1 -3532.22591289 +3 s3 35 s35/3 -2825.64434863 +3 s3 35 s35/6 -2226.87247619 +3 s3 35 s35/8 -2273.17374368 +3 s3 35 s35/10 -2807.78371377 +3 s3 37 s37/1 -3090.7830507 +3 s3 37 s37/3 -3356.19444943 +3 s3 37 s37/6 -3819.78140964 +3 s3 37 s37/8 -3280.30431209 +3 s3 37 s37/10 -3019.52908155 +3 s3 38 s38/1 -3047.63407732 +3 s3 38 s38/3 -2972.12269097 +3 s3 38 s38/6 -3484.48437412 +3 s3 38 s38/8 -3216.05224462 +3 s3 38 s38/10 -3207.45635903 +3 s3 40 s40/1 -2506.31589548 +3 s3 40 s40/3 -2738.67714294 +3 s3 40 s40/6 -2826.35311781 +3 s3 40 s40/8 -2477.55650197 +3 s3 40 s40/10 -2856.55209634 +4 s4 3 s3/1 -2097.51280034 +4 s4 3 s3/3 -2023.3387048 +4 s4 3 s3/6 -2217.05890884 +4 s4 3 s3/8 -2328.42194559 +4 s4 3 s3/10 -1579.12873829 +4 s4 4 s4/1 -2109.51091365 +4 s4 4 s4/3 -2397.45985327 +4 s4 4 s4/6 -2674.80222663 +4 s4 4 s4/8 -2048.16132875 +4 s4 4 s4/10 -1597.37572542 +4 s4 7 s7/1 -3368.69187597 +4 s4 7 s7/3 -3371.00271615 +4 s4 7 s7/6 -3232.68335763 +4 s4 7 s7/8 -3607.3979377 +4 s4 7 s7/10 -2884.55057149 +4 s4 8 s8/1 -4303.76466702 +4 s4 8 s8/3 -3202.42396848 +4 s4 8 s8/6 -3372.60526358 +4 s4 8 s8/8 -3351.99028682 +4 s4 8 s8/10 -2875.5348275 +4 s4 9 s9/1 -2860.08677303 +4 s4 9 s9/3 -2688.67567353 +4 s4 9 s9/6 -3232.40160873 +4 s4 9 s9/8 -2632.11421778 +4 s4 9 s9/10 -2286.6605215 +4 s4 13 s13/1 -4233.37474823 +4 s4 13 s13/3 -4777.76108956 +4 s4 13 s13/6 -3509.80014011 +4 s4 13 s13/8 -4071.49161933 +4 s4 13 s13/10 -3663.00400217 +4 s4 15 s15/1 -3090.32050098 +4 s4 15 s15/3 -3109.87978493 +4 s4 15 s15/6 -3244.80395029 +4 s4 15 s15/8 -3159.54011618 +4 s4 15 s15/10 -3212.33935998 +4 s4 18 s18/1 -3029.88191105 +4 s4 18 s18/3 -3693.98946937 +4 s4 18 s18/6 -3365.9813891 +4 s4 18 s18/8 -3671.60318908 +4 s4 18 s18/10 -3439.17926362 +4 s4 19 s19/1 -4126.33284024 +4 s4 19 s19/3 -4687.64632666 +4 s4 19 s19/6 -4503.65118444 +4 s4 19 s19/8 -4597.81186541 +4 s4 19 s19/10 -4061.93959722 +4 s4 22 s22/1 -4420.20420385 +4 s4 22 s22/3 -4122.6265905 +4 s4 22 s22/6 -4991.81040461 +4 s4 22 s22/8 -4531.38441564 +4 s4 22 s22/10 -4980.44450294 +4 s4 23 s23/1 -3401.81702162 +4 s4 23 s23/3 -4028.1336055 +4 s4 23 s23/6 -3978.45100619 +4 s4 23 s23/8 -3211.22978325 +4 s4 23 s23/10 -3198.10535623 +4 s4 25 s25/1 -2062.04530856 +4 s4 25 s25/3 -1864.81104842 +4 s4 25 s25/6 -2407.68073618 +4 s4 25 s25/8 -3439.82293636 +4 s4 25 s25/10 -1794.81628586 +4 s4 28 s28/1 -4540.54004502 +4 s4 28 s28/3 -4383.64097847 +4 s4 28 s28/6 -4281.67440812 +4 s4 28 s28/8 -3946.61365052 +4 s4 28 s28/10 -4569.28625396 +4 s4 30 s30/1 -3051.1905347 +4 s4 30 s30/3 -3573.25826858 +4 s4 30 s30/6 -3172.93119916 +4 s4 30 s30/8 -4035.35954145 +4 s4 30 s30/10 -3361.40514185 +4 s4 31 s31/1 -3252.21215713 +4 s4 31 s31/3 -4491.10730478 +4 s4 31 s31/6 -2883.97999623 +4 s4 31 s31/8 -2974.33442689 +4 s4 31 s31/10 -4419.81756879 +4 s4 32 s32/1 -3701.92675808 +4 s4 32 s32/3 -4230.76047786 +4 s4 32 s32/6 -3251.25421788 +4 s4 32 s32/8 -3866.64264384 +4 s4 32 s32/10 -3237.44016449 +4 s4 35 s35/1 -4204.25090013 +4 s4 35 s35/3 -3758.36177331 +4 s4 35 s35/6 -2154.19941863 +4 s4 35 s35/8 -2145.22688345 +4 s4 35 s35/10 -3437.97238277 +4 s4 37 s37/1 -4096.71829358 +4 s4 37 s37/3 -4415.32539877 +4 s4 37 s37/6 -4645.02754118 +4 s4 37 s37/8 -4196.70618568 +4 s4 37 s37/10 -4103.73478556 +4 s4 38 s38/1 -3692.77721021 +4 s4 38 s38/3 -3596.5152585 +4 s4 38 s38/6 -4024.46292833 +4 s4 38 s38/8 -3013.42746448 +4 s4 38 s38/10 -3585.91031401 +4 s4 40 s40/1 -3217.76780761 +4 s4 40 s40/3 -2798.59798876 +4 s4 40 s40/6 -3653.68846351 +4 s4 40 s40/8 -3265.06174969 +4 s4 40 s40/10 -4288.3030138 +7 s7 3 s3/1 -3120.00216408 +7 s7 3 s3/3 -2988.66583317 +7 s7 3 s3/6 -2928.16408153 +7 s7 3 s3/8 -3234.07830596 +7 s7 3 s3/10 -2929.70625522 +7 s7 4 s4/1 -3459.39856577 +7 s7 4 s4/3 -3822.00572827 +7 s7 4 s4/6 -3925.86211815 +7 s7 4 s4/8 -3681.6492638 +7 s7 4 s4/10 -3313.51262759 +7 s7 7 s7/1 -617.825862238 +7 s7 7 s7/3 -867.409063056 +7 s7 7 s7/6 -1353.44151952 +7 s7 7 s7/8 -1609.78693924 +7 s7 7 s7/10 -1305.90153291 +7 s7 8 s8/1 -4327.87306526 +7 s7 8 s8/3 -3735.28132801 +7 s7 8 s8/6 -3899.4043867 +7 s7 8 s8/8 -4159.10909214 +7 s7 8 s8/10 -3690.00289726 +7 s7 9 s9/1 -3461.41683118 +7 s7 9 s9/3 -3474.96610279 +7 s7 9 s9/6 -3796.28874482 +7 s7 9 s9/8 -3248.35661343 +7 s7 9 s9/10 -3331.48914238 +7 s7 13 s13/1 -4921.81558057 +7 s7 13 s13/3 -5177.0115092 +7 s7 13 s13/6 -4377.79358814 +7 s7 13 s13/8 -4549.47680222 +7 s7 13 s13/10 -4268.93263282 +7 s7 15 s15/1 -3076.7368174 +7 s7 15 s15/3 -3047.13247253 +7 s7 15 s15/6 -3249.84902365 +7 s7 15 s15/8 -3150.50121815 +7 s7 15 s15/10 -3452.85315844 +7 s7 18 s18/1 -3945.39914918 +7 s7 18 s18/3 -4458.14092777 +7 s7 18 s18/6 -4013.01623566 +7 s7 18 s18/8 -4338.24226246 +7 s7 18 s18/10 -3961.85437891 +7 s7 19 s19/1 -4809.91164653 +7 s7 19 s19/3 -5232.22205615 +7 s7 19 s19/6 -5157.79783698 +7 s7 19 s19/8 -4651.29311084 +7 s7 19 s19/10 -4874.47981006 +7 s7 22 s22/1 -4459.6222356 +7 s7 22 s22/3 -4377.94066581 +7 s7 22 s22/6 -4686.89847305 +7 s7 22 s22/8 -4587.77483596 +7 s7 22 s22/10 -4960.77430892 +7 s7 23 s23/1 -2844.66296646 +7 s7 23 s23/3 -3577.80820325 +7 s7 23 s23/6 -3760.03833299 +7 s7 23 s23/8 -2592.30467393 +7 s7 23 s23/10 -2782.98926037 +7 s7 25 s25/1 -3709.91905593 +7 s7 25 s25/3 -3673.52485981 +7 s7 25 s25/6 -4135.41309534 +7 s7 25 s25/8 -4498.09934416 +7 s7 25 s25/10 -3867.02458523 +7 s7 28 s28/1 -4903.59623882 +7 s7 28 s28/3 -4959.06234558 +7 s7 28 s28/6 -4757.67310498 +7 s7 28 s28/8 -4397.00986327 +7 s7 28 s28/10 -5163.55107447 +7 s7 30 s30/1 -3564.22134558 +7 s7 30 s30/3 -3884.05161515 +7 s7 30 s30/6 -3278.45824218 +7 s7 30 s30/8 -4203.96866458 +7 s7 30 s30/10 -3703.03644002 +7 s7 31 s31/1 -3610.5222855 +7 s7 31 s31/3 -4647.7502073 +7 s7 31 s31/6 -3826.85642829 +7 s7 31 s31/8 -3697.79390825 +7 s7 31 s31/10 -4711.21976699 +7 s7 32 s32/1 -4224.76328171 +7 s7 32 s32/3 -4880.3701751 +7 s7 32 s32/6 -3467.34232266 +7 s7 32 s32/8 -4205.0790813 +7 s7 32 s32/10 -3366.64775879 +7 s7 35 s35/1 -4139.19915643 +7 s7 35 s35/3 -4165.24385506 +7 s7 35 s35/6 -3757.11460823 +7 s7 35 s35/8 -3488.0609092 +7 s7 35 s35/10 -3316.41532002 +7 s7 37 s37/1 -4439.26346467 +7 s7 37 s37/3 -4628.42859719 +7 s7 37 s37/6 -4800.49047203 +7 s7 37 s37/8 -4425.21313548 +7 s7 37 s37/10 -4472.06844594 +7 s7 38 s38/1 -3637.57257635 +7 s7 38 s38/3 -3831.59619911 +7 s7 38 s38/6 -3844.91237951 +7 s7 38 s38/8 -3161.92143097 +7 s7 38 s38/10 -3168.10019452 +7 s7 40 s40/1 -3577.73736278 +7 s7 40 s40/3 -3146.39774768 +7 s7 40 s40/6 -3882.04884366 +7 s7 40 s40/8 -3735.30412249 +7 s7 40 s40/10 -4467.95343226 +8 s8 3 s3/1 -3816.49167388 +8 s8 3 s3/3 -4243.79743359 +8 s8 3 s3/6 -3082.51718778 +8 s8 3 s3/8 -3020.22874228 +8 s8 3 s3/10 -4113.09549687 +8 s8 4 s4/1 -3039.48610771 +8 s8 4 s4/3 -3040.63946246 +8 s8 4 s4/6 -3395.10221087 +8 s8 4 s4/8 -3116.55675349 +8 s8 4 s4/10 -4497.62739774 +8 s8 7 s7/1 -4211.6114398 +8 s8 7 s7/3 -3931.41737091 +8 s8 7 s7/6 -3580.80042267 +8 s8 7 s7/8 -3709.35948031 +8 s8 7 s7/10 -4510.99928392 +8 s8 8 s8/1 -1135.46945823 +8 s8 8 s8/3 -1664.95236718 +8 s8 8 s8/6 -1745.06667956 +8 s8 8 s8/8 -1874.43093948 +8 s8 8 s8/10 -2061.08463491 +8 s8 9 s9/1 -4297.44821021 +8 s8 9 s9/3 -4353.85917889 +8 s8 9 s9/6 -3575.52734928 +8 s8 9 s9/8 -3475.1781057 +8 s8 9 s9/10 -4719.13057395 +8 s8 13 s13/1 -4636.95144656 +8 s8 13 s13/3 -4732.44942349 +8 s8 13 s13/6 -4704.23970245 +8 s8 13 s13/8 -4514.0326596 +8 s8 13 s13/10 -4266.08581029 +8 s8 15 s15/1 -3669.79436722 +8 s8 15 s15/3 -3580.75949187 +8 s8 15 s15/6 -3609.71332974 +8 s8 15 s15/8 -3755.57239855 +8 s8 15 s15/10 -3543.09126099 +8 s8 18 s18/1 -4961.2173049 +8 s8 18 s18/3 -4109.75653182 +8 s8 18 s18/6 -3995.44195704 +8 s8 18 s18/8 -4177.49528886 +8 s8 18 s18/10 -3950.04207524 +8 s8 19 s19/1 -4297.15335629 +8 s8 19 s19/3 -4870.31852193 +8 s8 19 s19/6 -4496.97200871 +8 s8 19 s19/8 -4094.66435512 +8 s8 19 s19/10 -3822.2449824 +8 s8 22 s22/1 -4780.99227159 +8 s8 22 s22/3 -4689.028013 +8 s8 22 s22/6 -4984.82882451 +8 s8 22 s22/8 -4879.72886553 +8 s8 22 s22/10 -5098.05356772 +8 s8 23 s23/1 -3405.79008991 +8 s8 23 s23/3 -4776.51868726 +8 s8 23 s23/6 -4161.72307492 +8 s8 23 s23/8 -4788.46294731 +8 s8 23 s23/10 -3315.41957354 +8 s8 25 s25/1 -3824.59345334 +8 s8 25 s25/3 -3845.76304451 +8 s8 25 s25/6 -3763.12504434 +8 s8 25 s25/8 -3761.5899582 +8 s8 25 s25/10 -3905.03364425 +8 s8 28 s28/1 -4877.23858214 +8 s8 28 s28/3 -4705.39011288 +8 s8 28 s28/6 -4772.27918626 +8 s8 28 s28/8 -5550.62266467 +8 s8 28 s28/10 -4717.01599088 +8 s8 30 s30/1 -4084.52503825 +8 s8 30 s30/3 -4221.1789981 +8 s8 30 s30/6 -4061.9396941 +8 s8 30 s30/8 -4709.78243598 +8 s8 30 s30/10 -3900.24932223 +8 s8 31 s31/1 -4796.206716 +8 s8 31 s31/3 -5007.39195856 +8 s8 31 s31/6 -4423.3107164 +8 s8 31 s31/8 -4652.91164347 +8 s8 31 s31/10 -4980.18129086 +8 s8 32 s32/1 -3938.07008877 +8 s8 32 s32/3 -4224.23005286 +8 s8 32 s32/6 -2928.42135463 +8 s8 32 s32/8 -3585.26122854 +8 s8 32 s32/10 -3020.08375318 +8 s8 35 s35/1 -4733.303325 +8 s8 35 s35/3 -4275.11431188 +8 s8 35 s35/6 -3467.16231594 +8 s8 35 s35/8 -3506.0442336 +8 s8 35 s35/10 -4471.58251982 +8 s8 37 s37/1 -5197.10341632 +8 s8 37 s37/3 -5296.46506571 +8 s8 37 s37/6 -5060.04946633 +8 s8 37 s37/8 -4485.87436358 +8 s8 37 s37/10 -4939.53354307 +8 s8 38 s38/1 -3295.6245965 +8 s8 38 s38/3 -3303.72233957 +8 s8 38 s38/6 -3557.30039322 +8 s8 38 s38/8 -3781.97830608 +8 s8 38 s38/10 -3744.9474251 +8 s8 40 s40/1 -4572.35498313 +8 s8 40 s40/3 -4854.67113335 +8 s8 40 s40/6 -4103.05579492 +8 s8 40 s40/8 -4230.86819166 +8 s8 40 s40/10 -3904.31330825 +9 s9 3 s3/1 -2547.5104482 +9 s9 3 s3/3 -2725.45115096 +9 s9 3 s3/6 -2211.99297617 +9 s9 3 s3/8 -2416.50020167 +9 s9 3 s3/10 -2808.00169181 +9 s9 4 s4/1 -2252.65199646 +9 s9 4 s4/3 -2590.48954693 +9 s9 4 s4/6 -3289.80948945 +9 s9 4 s4/8 -2569.14238439 +9 s9 4 s4/10 -2649.76082109 +9 s9 7 s7/1 -3300.80205386 +9 s9 7 s7/3 -3384.85442682 +9 s9 7 s7/6 -3308.89117021 +9 s9 7 s7/8 -3280.71373687 +9 s9 7 s7/10 -3315.55371503 +9 s9 8 s8/1 -4185.21171568 +9 s9 8 s8/3 -3634.51475298 +9 s9 8 s8/6 -4019.79386655 +9 s9 8 s8/8 -3900.67066506 +9 s9 8 s8/10 -3532.26591473 +9 s9 9 s9/1 -1232.98008048 +9 s9 9 s9/3 -1256.06667593 +9 s9 9 s9/6 -1764.52243494 +9 s9 9 s9/8 -1447.87853552 +9 s9 9 s9/10 -1789.71184484 +9 s9 13 s13/1 -4619.25396528 +9 s9 13 s13/3 -5175.65502321 +9 s9 13 s13/6 -4272.85697332 +9 s9 13 s13/8 -4553.62609701 +9 s9 13 s13/10 -4244.44673611 +9 s9 15 s15/1 -3454.43840637 +9 s9 15 s15/3 -3439.87009412 +9 s9 15 s15/6 -3578.29135252 +9 s9 15 s15/8 -3440.83204868 +9 s9 15 s15/10 -2665.60947707 +9 s9 18 s18/1 -4148.87008937 +9 s9 18 s18/3 -4109.69400345 +9 s9 18 s18/6 -4091.07132553 +9 s9 18 s18/8 -4208.3489515 +9 s9 18 s18/10 -3757.36612039 +9 s9 19 s19/1 -4807.20953164 +9 s9 19 s19/3 -5347.47059831 +9 s9 19 s19/6 -5037.02683897 +9 s9 19 s19/8 -5158.78820124 +9 s9 19 s19/10 -4623.00188 +9 s9 22 s22/1 -4154.24807601 +9 s9 22 s22/3 -3844.22286129 +9 s9 22 s22/6 -4415.27940247 +9 s9 22 s22/8 -4209.98015364 +9 s9 22 s22/10 -4700.9501879 +9 s9 23 s23/1 -2403.64952559 +9 s9 23 s23/3 -2965.62721504 +9 s9 23 s23/6 -2970.82455651 +9 s9 23 s23/8 -2439.9060999 +9 s9 23 s23/10 -2362.75062609 +9 s9 25 s25/1 -2186.76811782 +9 s9 25 s25/3 -2250.01746741 +9 s9 25 s25/6 -2913.21012077 +9 s9 25 s25/8 -3486.83051857 +9 s9 25 s25/10 -2463.4559735 +9 s9 28 s28/1 -4918.87479674 +9 s9 28 s28/3 -4681.85746463 +9 s9 28 s28/6 -4617.28665292 +9 s9 28 s28/8 -4548.91590351 +9 s9 28 s28/10 -4964.8811564 +9 s9 30 s30/1 -2468.85347323 +9 s9 30 s30/3 -2684.22105025 +9 s9 30 s30/6 -2352.19611749 +9 s9 30 s30/8 -3203.79571838 +9 s9 30 s30/10 -2589.19072649 +9 s9 31 s31/1 -1990.71715309 +9 s9 31 s31/3 -4574.3250072 +9 s9 31 s31/6 -2638.76143027 +9 s9 31 s31/8 -2136.9668398 +9 s9 31 s31/10 -4586.19479594 +9 s9 32 s32/1 -4540.36181713 +9 s9 32 s32/3 -4868.08338276 +9 s9 32 s32/6 -4037.78030625 +9 s9 32 s32/8 -4490.67607519 +9 s9 32 s32/10 -3923.63980576 +9 s9 35 s35/1 -3121.69389479 +9 s9 35 s35/3 -3916.72829133 +9 s9 35 s35/6 -3123.62025962 +9 s9 35 s35/8 -2480.64668786 +9 s9 35 s35/10 -3432.45445572 +9 s9 37 s37/1 -4479.69370996 +9 s9 37 s37/3 -4742.56540091 +9 s9 37 s37/6 -4993.89089683 +9 s9 37 s37/8 -4566.20131271 +9 s9 37 s37/10 -4537.43975603 +9 s9 38 s38/1 -2505.17244521 +9 s9 38 s38/3 -2707.94431745 +9 s9 38 s38/6 -2761.29272417 +9 s9 38 s38/8 -2263.62593044 +9 s9 38 s38/10 -2398.09045021 +9 s9 40 s40/1 -2928.99104151 +9 s9 40 s40/3 -3022.18661213 +9 s9 40 s40/6 -2909.42717431 +9 s9 40 s40/8 -2900.50106801 +9 s9 40 s40/10 -3514.24554484 +13 s13 3 s3/1 -3202.38137554 +13 s13 3 s3/3 -3308.2248404 +13 s13 3 s3/6 -3501.44047001 +13 s13 3 s3/8 -3262.35823784 +13 s13 3 s3/10 -3444.20525571 +13 s13 4 s4/1 -3649.59387841 +13 s13 4 s4/3 -3390.63212187 +13 s13 4 s4/6 -3246.33460094 +13 s13 4 s4/8 -3342.89496156 +13 s13 4 s4/10 -4299.54590767 +13 s13 7 s7/1 -4715.98664504 +13 s13 7 s7/3 -4609.27291027 +13 s13 7 s7/6 -4422.0260616 +13 s13 7 s7/8 -4722.80244759 +13 s13 7 s7/10 -4029.53815479 +13 s13 8 s8/1 -4670.41935822 +13 s13 8 s8/3 -4525.99460014 +13 s13 8 s8/6 -4406.83573849 +13 s13 8 s8/8 -4474.32175203 +13 s13 8 s8/10 -4572.86719878 +13 s13 9 s9/1 -4637.22294275 +13 s13 9 s9/3 -4500.651687 +13 s13 9 s9/6 -4463.61015407 +13 s13 9 s9/8 -4243.16691824 +13 s13 9 s9/10 -4572.15435639 +13 s13 13 s13/1 -1025.77704523 +13 s13 13 s13/3 -1783.98005114 +13 s13 13 s13/6 -1558.11784716 +13 s13 13 s13/8 -1039.99583084 +13 s13 13 s13/10 -703.448590077 +13 s13 15 s15/1 -4038.32937849 +13 s13 15 s15/3 -4158.46410153 +13 s13 15 s15/6 -3796.56417856 +13 s13 15 s15/8 -4429.3755221 +13 s13 15 s15/10 -3585.52994631 +13 s13 18 s18/1 -2812.99173883 +13 s13 18 s18/3 -1891.55964525 +13 s13 18 s18/6 -2035.67549695 +13 s13 18 s18/8 -1978.19724817 +13 s13 18 s18/10 -2499.42504522 +13 s13 19 s19/1 -3567.82071157 +13 s13 19 s19/3 -3234.31779564 +13 s13 19 s19/6 -3159.33639979 +13 s13 19 s19/8 -3323.52201903 +13 s13 19 s19/10 -3551.06114754 +13 s13 22 s22/1 -5414.57148439 +13 s13 22 s22/3 -5371.51231446 +13 s13 22 s22/6 -5895.08586155 +13 s13 22 s22/8 -5541.10555282 +13 s13 22 s22/10 -5289.97985403 +13 s13 23 s23/1 -4783.79443316 +13 s13 23 s23/3 -5184.20935404 +13 s13 23 s23/6 -4767.83616152 +13 s13 23 s23/8 -5121.71712236 +13 s13 23 s23/10 -4559.26698216 +13 s13 25 s25/1 -3377.53134774 +13 s13 25 s25/3 -3115.54927275 +13 s13 25 s25/6 -2950.2693355 +13 s13 25 s25/8 -2610.67305436 +13 s13 25 s25/10 -3284.9945593 +13 s13 28 s28/1 -2818.43584739 +13 s13 28 s28/3 -2939.87837017 +13 s13 28 s28/6 -2959.54612292 +13 s13 28 s28/8 -3249.15642063 +13 s13 28 s28/10 -2605.52287392 +13 s13 30 s30/1 -5339.28315308 +13 s13 30 s30/3 -5611.91473319 +13 s13 30 s30/6 -5330.75403669 +13 s13 30 s30/8 -5777.47373497 +13 s13 30 s30/10 -5300.57333828 +13 s13 31 s31/1 -5210.82295907 +13 s13 31 s31/3 -4412.76465696 +13 s13 31 s31/6 -4441.92121769 +13 s13 31 s31/8 -4896.76699795 +13 s13 31 s31/10 -4488.13181919 +13 s13 32 s32/1 -3150.51061775 +13 s13 32 s32/3 -3159.71478883 +13 s13 32 s32/6 -3334.54053001 +13 s13 32 s32/8 -3056.73154297 +13 s13 32 s32/10 -3413.7973795 +13 s13 35 s35/1 -3886.54628516 +13 s13 35 s35/3 -3043.08940014 +13 s13 35 s35/6 -2749.45139543 +13 s13 35 s35/8 -3165.90623178 +13 s13 35 s35/10 -3046.81538122 +13 s13 37 s37/1 -2678.74294941 +13 s13 37 s37/3 -2658.9158326 +13 s13 37 s37/6 -3609.67071608 +13 s13 37 s37/8 -3538.43631387 +13 s13 37 s37/10 -2501.21295259 +13 s13 38 s38/1 -4953.92150692 +13 s13 38 s38/3 -4742.48319921 +13 s13 38 s38/6 -5178.55887189 +13 s13 38 s38/8 -5038.90368513 +13 s13 38 s38/10 -4841.33560269 +13 s13 40 s40/1 -2809.70264194 +13 s13 40 s40/3 -3157.01332876 +13 s13 40 s40/6 -2927.3338441 +13 s13 40 s40/8 -2688.96600375 +13 s13 40 s40/10 -3069.88991179 +15 s15 3 s3/1 -2580.30354292 +15 s15 3 s3/3 -2834.29603042 +15 s15 3 s3/6 -2759.19839368 +15 s15 3 s3/8 -2783.20695581 +15 s15 3 s3/10 -3143.83963287 +15 s15 4 s4/1 -2202.64057116 +15 s15 4 s4/3 -2301.81039791 +15 s15 4 s4/6 -3097.5947528 +15 s15 4 s4/8 -2350.44748544 +15 s15 4 s4/10 -3349.64729233 +15 s15 7 s7/1 -3311.13835445 +15 s15 7 s7/3 -3267.20955526 +15 s15 7 s7/6 -2929.4992405 +15 s15 7 s7/8 -3137.60235246 +15 s15 7 s7/10 -3259.5085004 +15 s15 8 s8/1 -3351.22118121 +15 s15 8 s8/3 -3589.75913922 +15 s15 8 s8/6 -3772.85395682 +15 s15 8 s8/8 -3625.2943284 +15 s15 8 s8/10 -3654.16304296 +15 s15 9 s9/1 -2915.57607571 +15 s15 9 s9/3 -2894.11208415 +15 s15 9 s9/6 -2772.64507605 +15 s15 9 s9/8 -2588.56558412 +15 s15 9 s9/10 -3200.31211964 +15 s15 13 s13/1 -3586.37478927 +15 s15 13 s13/3 -3774.84487141 +15 s15 13 s13/6 -3542.40649551 +15 s15 13 s13/8 -3742.37638037 +15 s15 13 s13/10 -3370.21784657 +15 s15 15 s15/1 -2402.53690896 +15 s15 15 s15/3 -2367.48473176 +15 s15 15 s15/6 -2374.53446452 +15 s15 15 s15/8 -2022.0055133 +15 s15 15 s15/10 -969.500884681 +15 s15 18 s18/1 -3871.88457482 +15 s15 18 s18/3 -3148.77140084 +15 s15 18 s18/6 -3291.11248654 +15 s15 18 s18/8 -3218.72499924 +15 s15 18 s18/10 -3401.64969692 +15 s15 19 s19/1 -3757.87263186 +15 s15 19 s19/3 -4112.05649595 +15 s15 19 s19/6 -3812.79868872 +15 s15 19 s19/8 -4000.182565 +15 s15 19 s19/10 -3583.69493135 +15 s15 22 s22/1 -3195.0359962 +15 s15 22 s22/3 -3028.62720878 +15 s15 22 s22/6 -3498.44994816 +15 s15 22 s22/8 -3283.34848436 +15 s15 22 s22/10 -3446.01197175 +15 s15 23 s23/1 -3070.25974401 +15 s15 23 s23/3 -3390.20344442 +15 s15 23 s23/6 -2932.20788748 +15 s15 23 s23/8 -3571.3765668 +15 s15 23 s23/10 -2954.78677002 +15 s15 25 s25/1 -2611.29833149 +15 s15 25 s25/3 -2829.31199376 +15 s15 25 s25/6 -2714.51118348 +15 s15 25 s25/8 -2870.18228171 +15 s15 25 s25/10 -2864.16113222 +15 s15 28 s28/1 -3753.4390575 +15 s15 28 s28/3 -3623.60109655 +15 s15 28 s28/6 -3554.51786063 +15 s15 28 s28/8 -4121.24848957 +15 s15 28 s28/10 -3803.49807022 +15 s15 30 s30/1 -2649.16787496 +15 s15 30 s30/3 -2898.3050272 +15 s15 30 s30/6 -2667.58480765 +15 s15 30 s30/8 -3007.14301998 +15 s15 30 s30/10 -2629.9532381 +15 s15 31 s31/1 -2816.97617563 +15 s15 31 s31/3 -3076.41676091 +15 s15 31 s31/6 -2482.64472589 +15 s15 31 s31/8 -2679.15146696 +15 s15 31 s31/10 -3032.7179238 +15 s15 32 s32/1 -3455.24452617 +15 s15 32 s32/3 -3442.20655852 +15 s15 32 s32/6 -2990.03785573 +15 s15 32 s32/8 -3263.88075526 +15 s15 32 s32/10 -2841.40823188 +15 s15 35 s35/1 -2748.56316738 +15 s15 35 s35/3 -2025.04895307 +15 s15 35 s35/6 -2608.84048224 +15 s15 35 s35/8 -2225.51881792 +15 s15 35 s35/10 -2699.40465375 +15 s15 37 s37/1 -3776.23292984 +15 s15 37 s37/3 -3875.69905416 +15 s15 37 s37/6 -3703.36249652 +15 s15 37 s37/8 -3265.46678469 +15 s15 37 s37/10 -3826.94635927 +15 s15 38 s38/1 -3084.26750791 +15 s15 38 s38/3 -2851.27680759 +15 s15 38 s38/6 -3295.81461978 +15 s15 38 s38/8 -3172.81880218 +15 s15 38 s38/10 -2947.70788332 +15 s15 40 s40/1 -2943.88908446 +15 s15 40 s40/3 -3270.57500985 +15 s15 40 s40/6 -3019.89230379 +15 s15 40 s40/8 -2933.41439825 +15 s15 40 s40/10 -2891.00228583 +18 s18 3 s3/1 -2956.0754384 +18 s18 3 s3/3 -2753.84726042 +18 s18 3 s3/6 -3202.07741089 +18 s18 3 s3/8 -3223.11593887 +18 s18 3 s3/10 -2672.34954412 +18 s18 4 s4/1 -3433.27996686 +18 s18 4 s4/3 -3560.49800004 +18 s18 4 s4/6 -3365.12571015 +18 s18 4 s4/8 -3343.40806464 +18 s18 4 s4/10 -3335.1372178 +18 s18 7 s7/1 -4104.2010016 +18 s18 7 s7/3 -3962.80832438 +18 s18 7 s7/6 -3984.14020527 +18 s18 7 s7/8 -4326.38507592 +18 s18 7 s7/10 -3257.72684289 +18 s18 8 s8/1 -4836.19576879 +18 s18 8 s8/3 -4152.65556388 +18 s18 8 s8/6 -4134.79509243 +18 s18 8 s8/8 -4138.08421509 +18 s18 8 s8/10 -4040.64411074 +18 s18 9 s9/1 -4398.74565735 +18 s18 9 s9/3 -4257.16821011 +18 s18 9 s9/6 -4452.68844392 +18 s18 9 s9/8 -3882.39685689 +18 s18 9 s9/10 -3796.72563078 +18 s18 13 s13/1 -2740.04630919 +18 s18 13 s13/3 -3060.0403958 +18 s18 13 s13/6 -1630.54131366 +18 s18 13 s13/8 -2421.86464267 +18 s18 13 s13/10 -1997.96008334 +18 s18 15 s15/1 -3876.18244178 +18 s18 15 s15/3 -4022.47338995 +18 s18 15 s15/6 -3795.16118689 +18 s18 15 s15/8 -4223.76072291 +18 s18 15 s15/10 -3537.02525272 +18 s18 18 s18/1 -1368.23821308 +18 s18 18 s18/3 -2066.23727685 +18 s18 18 s18/6 -1587.61885353 +18 s18 18 s18/8 -1839.87833423 +18 s18 18 s18/10 -1990.61368518 +18 s18 19 s19/1 -4252.46720452 +18 s18 19 s19/3 -4139.21533354 +18 s18 19 s19/6 -4281.91841669 +18 s18 19 s19/8 -4104.2220241 +18 s18 19 s19/10 -4395.90138652 +18 s18 22 s22/1 -5777.64079119 +18 s18 22 s22/3 -5629.23262098 +18 s18 22 s22/6 -6322.34503807 +18 s18 22 s22/8 -5891.32768241 +18 s18 22 s22/10 -5932.51211239 +18 s18 23 s23/1 -4440.91979543 +18 s18 23 s23/3 -4879.48453038 +18 s18 23 s23/6 -4783.21865357 +18 s18 23 s23/8 -4380.11974451 +18 s18 23 s23/10 -4314.32765436 +18 s18 25 s25/1 -2878.87604183 +18 s18 25 s25/3 -2601.15384147 +18 s18 25 s25/6 -2763.80042895 +18 s18 25 s25/8 -3275.1127543 +18 s18 25 s25/10 -2710.48883585 +18 s18 28 s28/1 -3883.4795926 +18 s18 28 s28/3 -4014.70519937 +18 s18 28 s28/6 -3864.86883847 +18 s18 28 s28/8 -3617.13881658 +18 s18 28 s28/10 -3927.90765349 +18 s18 30 s30/1 -4917.40113865 +18 s18 30 s30/3 -5253.20232186 +18 s18 30 s30/6 -4902.57477108 +18 s18 30 s30/8 -5610.87560505 +18 s18 30 s30/10 -5071.17081244 +18 s18 31 s31/1 -4970.03856356 +18 s18 31 s31/3 -4780.61996987 +18 s18 31 s31/6 -4481.51880791 +18 s18 31 s31/8 -4749.72667526 +18 s18 31 s31/10 -4752.82800544 +18 s18 32 s32/1 -2884.34375405 +18 s18 32 s32/3 -3357.01185028 +18 s18 32 s32/6 -3294.4650071 +18 s18 32 s32/8 -3358.04252319 +18 s18 32 s32/10 -3465.1118564 +18 s18 35 s35/1 -4054.0884318 +18 s18 35 s35/3 -3541.25317234 +18 s18 35 s35/6 -2447.59004413 +18 s18 35 s35/8 -2683.93015099 +18 s18 35 s35/10 -2927.94916434 +18 s18 37 s37/1 -3388.73624303 +18 s18 37 s37/3 -3528.1627107 +18 s18 37 s37/6 -4547.2080635 +18 s18 37 s37/8 -4411.99514613 +18 s18 37 s37/10 -3340.94174374 +18 s18 38 s38/1 -4926.36256402 +18 s18 38 s38/3 -4839.07834759 +18 s18 38 s38/6 -5135.8908713 +18 s18 38 s38/8 -4499.47476968 +18 s18 38 s38/10 -4760.28286303 +18 s18 40 s40/1 -2584.2597622 +18 s18 40 s40/3 -2220.28936413 +18 s18 40 s40/6 -3041.32775422 +18 s18 40 s40/8 -2592.87675242 +18 s18 40 s40/10 -3699.5280574 +19 s19 3 s3/1 -4005.79246239 +19 s19 3 s3/3 -4118.92914119 +19 s19 3 s3/6 -3833.14889994 +19 s19 3 s3/8 -3715.575243 +19 s19 3 s3/10 -3939.12020766 +19 s19 4 s4/1 -3860.16054019 +19 s19 4 s4/3 -3381.42907685 +19 s19 4 s4/6 -2945.51696829 +19 s19 4 s4/8 -3243.10737747 +19 s19 4 s4/10 -4452.30579568 +19 s19 7 s7/1 -4507.31651077 +19 s19 7 s7/3 -4382.64231377 +19 s19 7 s7/6 -4072.18663786 +19 s19 7 s7/8 -4514.54034327 +19 s19 7 s7/10 -4232.66998104 +19 s19 8 s8/1 -3990.13253476 +19 s19 8 s8/3 -3726.14317857 +19 s19 8 s8/6 -3455.3955025 +19 s19 8 s8/8 -3531.65964868 +19 s19 8 s8/10 -3811.69795385 +19 s19 9 s9/1 -4804.84536787 +19 s19 9 s9/3 -4630.67492625 +19 s19 9 s9/6 -4542.81319946 +19 s19 9 s9/8 -4591.6733388 +19 s19 9 s9/10 -4912.24892349 +19 s19 13 s13/1 -3408.93242688 +19 s19 13 s13/3 -3636.10644374 +19 s19 13 s13/6 -3575.5230924 +19 s19 13 s13/8 -3289.4655635 +19 s19 13 s13/10 -3252.51422672 +19 s19 15 s15/1 -2502.05494556 +19 s19 15 s15/3 -2560.5900693 +19 s19 15 s15/6 -2174.31152183 +19 s19 15 s15/8 -3363.01313433 +19 s19 15 s15/10 -4132.71151481 +19 s19 18 s18/1 -4098.47532505 +19 s19 18 s18/3 -3791.90925274 +19 s19 18 s18/6 -3671.29856609 +19 s19 18 s18/8 -3836.71681672 +19 s19 18 s18/10 -4058.53157732 +19 s19 19 s19/1 -1655.10609509 +19 s19 19 s19/3 -1856.32442417 +19 s19 19 s19/6 -1981.77662831 +19 s19 19 s19/8 -1523.05351521 +19 s19 19 s19/10 -1793.32063537 +19 s19 22 s22/1 -4542.93709979 +19 s19 22 s22/3 -4635.20062189 +19 s19 22 s22/6 -5138.72256328 +19 s19 22 s22/8 -4765.76162168 +19 s19 22 s22/10 -4569.45199841 +19 s19 23 s23/1 -5065.46201531 +19 s19 23 s23/3 -5420.00135699 +19 s19 23 s23/6 -5058.84946146 +19 s19 23 s23/8 -5477.31680922 +19 s19 23 s23/10 -4714.11885335 +19 s19 25 s25/1 -4100.03600349 +19 s19 25 s25/3 -3788.16763441 +19 s19 25 s25/6 -3668.54705235 +19 s19 25 s25/8 -3174.69288854 +19 s19 25 s25/10 -3891.93512538 +19 s19 28 s28/1 -3672.44822887 +19 s19 28 s28/3 -3812.86840783 +19 s19 28 s28/6 -3780.88145851 +19 s19 28 s28/8 -4165.96288079 +19 s19 28 s28/10 -3337.29227785 +19 s19 30 s30/1 -5068.60509747 +19 s19 30 s30/3 -5434.14163217 +19 s19 30 s30/6 -5091.08219443 +19 s19 30 s30/8 -5324.80076583 +19 s19 30 s30/10 -4972.50450074 +19 s19 31 s31/1 -5305.66141746 +19 s19 31 s31/3 -3515.22861155 +19 s19 31 s31/6 -4189.50566417 +19 s19 31 s31/8 -4843.40808253 +19 s19 31 s31/10 -3660.63476966 +19 s19 32 s32/1 -2757.87174686 +19 s19 32 s32/3 -2711.40948091 +19 s19 32 s32/6 -2238.58130064 +19 s19 32 s32/8 -2184.17893198 +19 s19 32 s32/10 -2245.49686462 +19 s19 35 s35/1 -4935.13588897 +19 s19 35 s35/3 -3622.32708653 +19 s19 35 s35/6 -3149.32892904 +19 s19 35 s35/8 -3679.30587397 +19 s19 35 s35/10 -3981.87228096 +19 s19 37 s37/1 -4190.64319758 +19 s19 37 s37/3 -4273.59867669 +19 s19 37 s37/6 -3188.35987423 +19 s19 37 s37/8 -2939.93025623 +19 s19 37 s37/10 -3739.14927102 +19 s19 38 s38/1 -5132.75426835 +19 s19 38 s38/3 -4887.07661704 +19 s19 38 s38/6 -5341.51844801 +19 s19 38 s38/8 -5280.0711527 +19 s19 38 s38/10 -5097.22377921 +19 s19 40 s40/1 -4408.92556724 +19 s19 40 s40/3 -4593.0477807 +19 s19 40 s40/6 -4322.70610622 +19 s19 40 s40/8 -4277.09971507 +19 s19 40 s40/10 -4340.68119243 +22 s22 3 s3/1 -4013.83712581 +22 s22 3 s3/3 -4245.36091725 +22 s22 3 s3/6 -4722.0005028 +22 s22 3 s3/8 -4557.14551599 +22 s22 3 s3/10 -4681.20048979 +22 s22 4 s4/1 -3972.68768043 +22 s22 4 s4/3 -3803.29638751 +22 s22 4 s4/6 -4846.51452184 +22 s22 4 s4/8 -3932.32391055 +22 s22 4 s4/10 -4979.62265907 +22 s22 7 s7/1 -4500.57252797 +22 s22 7 s7/3 -4711.79647694 +22 s22 7 s7/6 -4246.06155028 +22 s22 7 s7/8 -4473.03310168 +22 s22 7 s7/10 -4771.9361284 +22 s22 8 s8/1 -4808.75178772 +22 s22 8 s8/3 -5343.98374147 +22 s22 8 s8/6 -5345.90674104 +22 s22 8 s8/8 -5506.97670535 +22 s22 8 s8/10 -5362.94961502 +22 s22 9 s9/1 -3961.80579929 +22 s22 9 s9/3 -3938.10362431 +22 s22 9 s9/6 -4430.72639074 +22 s22 9 s9/8 -4573.51790429 +22 s22 9 s9/10 -4746.78613148 +22 s22 13 s13/1 -5118.0573909 +22 s22 13 s13/3 -5607.88818019 +22 s22 13 s13/6 -5450.28639594 +22 s22 13 s13/8 -5618.92461221 +22 s22 13 s13/10 -5269.30155745 +22 s22 15 s15/1 -3288.79672215 +22 s22 15 s15/3 -3155.55321591 +22 s22 15 s15/6 -3290.84168107 +22 s22 15 s15/8 -3060.21058005 +22 s22 15 s15/10 -3611.64723744 +22 s22 18 s18/1 -6041.21843213 +22 s22 18 s18/3 -5627.85835651 +22 s22 18 s18/6 -5861.88863557 +22 s22 18 s18/8 -5749.26554893 +22 s22 18 s18/10 -6014.4979931 +22 s22 19 s19/1 -4535.04894157 +22 s22 19 s19/3 -5014.09830014 +22 s22 19 s19/6 -4377.88594459 +22 s22 19 s19/8 -4849.96254847 +22 s22 19 s19/10 -4155.11215747 +22 s22 22 s22/1 -515.267348009 +22 s22 22 s22/3 -948.789791163 +22 s22 22 s22/6 -1236.73608805 +22 s22 22 s22/8 -703.084336005 +22 s22 22 s22/10 -974.100293608 +22 s22 23 s23/1 -4848.46219366 +22 s22 23 s23/3 -4427.04439093 +22 s22 23 s23/6 -4246.68145015 +22 s22 23 s23/8 -4982.13108183 +22 s22 23 s23/10 -4667.97047257 +22 s22 25 s25/1 -4786.34227314 +22 s22 25 s25/3 -4911.21676656 +22 s22 25 s25/6 -4626.34028371 +22 s22 25 s25/8 -4656.62335836 +22 s22 25 s25/10 -4872.79827361 +22 s22 28 s28/1 -4443.72189883 +22 s22 28 s28/3 -4186.33599304 +22 s22 28 s28/6 -4236.66798511 +22 s22 28 s28/8 -4657.9993282 +22 s22 28 s28/10 -4475.19769706 +22 s22 30 s30/1 -3498.14355065 +22 s22 30 s30/3 -3666.29410946 +22 s22 30 s30/6 -3665.83521491 +22 s22 30 s30/8 -3217.52750188 +22 s22 30 s30/10 -3434.77055482 +22 s22 31 s31/1 -3556.91714853 +22 s22 31 s31/3 -3458.06518471 +22 s22 31 s31/6 -3016.7938301 +22 s22 31 s31/8 -3298.13128919 +22 s22 31 s31/10 -3434.44289401 +22 s22 32 s32/1 -5419.57225464 +22 s22 32 s32/3 -5171.4314143 +22 s22 32 s32/6 -4530.98788336 +22 s22 32 s32/8 -4837.08556526 +22 s22 32 s32/10 -4175.5812598 +22 s22 35 s35/1 -4552.24712413 +22 s22 35 s35/3 -3474.81249522 +22 s22 35 s35/6 -4649.99115585 +22 s22 35 s35/8 -4618.95104803 +22 s22 35 s35/10 -4853.86653993 +22 s22 37 s37/1 -4657.89159791 +22 s22 37 s37/3 -4753.32433721 +22 s22 37 s37/6 -3407.21749321 +22 s22 37 s37/8 -2896.36740895 +22 s22 37 s37/10 -4695.07449402 +22 s22 38 s38/1 -4441.09611284 +22 s22 38 s38/3 -3904.35113202 +22 s22 38 s38/6 -4643.11936678 +22 s22 38 s38/8 -4656.44212352 +22 s22 38 s38/10 -4053.67652122 +22 s22 40 s40/1 -4775.90517716 +22 s22 40 s40/3 -5412.87280174 +22 s22 40 s40/6 -4934.41367373 +22 s22 40 s40/8 -4823.481109 +22 s22 40 s40/10 -4752.20632024 +23 s23 3 s3/1 -3065.793728 +23 s23 3 s3/3 -3304.1012835 +23 s23 3 s3/6 -2697.94897454 +23 s23 3 s3/8 -2973.96709773 +23 s23 3 s3/10 -3566.87643249 +23 s23 4 s4/1 -3094.90242262 +23 s23 4 s4/3 -3411.1778258 +23 s23 4 s4/6 -3857.43636003 +23 s23 4 s4/8 -3478.50057655 +23 s23 4 s4/10 -3162.81838569 +23 s23 7 s7/1 -2970.79992083 +23 s23 7 s7/3 -3061.24569793 +23 s23 7 s7/6 -3027.32222561 +23 s23 7 s7/8 -2632.47938729 +23 s23 7 s7/10 -3661.11323529 +23 s23 8 s8/1 -4030.10186955 +23 s23 8 s8/3 -4046.05381812 +23 s23 8 s8/6 -4444.70155607 +23 s23 8 s8/8 -4195.29697767 +23 s23 8 s8/10 -3971.18744652 +23 s23 9 s9/1 -2465.22492143 +23 s23 9 s9/3 -2631.16651264 +23 s23 9 s9/6 -2331.92162879 +23 s23 9 s9/8 -2595.47426281 +23 s23 9 s9/10 -3109.15007245 +23 s23 13 s13/1 -4925.13286069 +23 s23 13 s13/3 -5261.47692111 +23 s23 13 s13/6 -4728.2214681 +23 s23 13 s13/8 -4804.98067266 +23 s23 13 s13/10 -4585.90879842 +23 s23 15 s15/1 -3513.75609217 +23 s23 15 s15/3 -3547.3463239 +23 s23 15 s15/6 -3652.02243904 +23 s23 15 s15/8 -3701.23646049 +23 s23 15 s15/10 -2773.22918254 +23 s23 18 s18/1 -4497.83217492 +23 s23 18 s18/3 -4301.17531852 +23 s23 18 s18/6 -4468.58853409 +23 s23 18 s18/8 -4424.05826795 +23 s23 18 s18/10 -4098.27151373 +23 s23 19 s19/1 -5223.28531335 +23 s23 19 s19/3 -5610.25680194 +23 s23 19 s19/6 -5351.32214373 +23 s23 19 s19/8 -5291.98946574 +23 s23 19 s19/10 -5051.51557636 +23 s23 22 s22/1 -4207.6908045 +23 s23 22 s22/3 -4053.78539765 +23 s23 22 s22/6 -4258.27826468 +23 s23 22 s22/8 -4411.93016966 +23 s23 22 s22/10 -4706.94088805 +23 s23 23 s23/1 -1879.51262825 +23 s23 23 s23/3 -1794.12311521 +23 s23 23 s23/6 -1253.49476703 +23 s23 23 s23/8 -1932.52036884 +23 s23 23 s23/10 -1955.91394431 +23 s23 25 s25/1 -3123.01825674 +23 s23 25 s25/3 -3316.35999994 +23 s23 25 s25/6 -3614.98555187 +23 s23 25 s25/8 -3803.60236161 +23 s23 25 s25/10 -3402.73744394 +23 s23 28 s28/1 -5279.40944257 +23 s23 28 s28/3 -5064.11538426 +23 s23 28 s28/6 -5055.93827636 +23 s23 28 s28/8 -5065.31467415 +23 s23 28 s28/10 -5178.60269835 +23 s23 30 s30/1 -2554.16599194 +23 s23 30 s30/3 -2376.32433571 +23 s23 30 s30/6 -2383.73666842 +23 s23 30 s30/8 -3071.95287764 +23 s23 30 s30/10 -2516.99715024 +23 s23 31 s31/1 -2762.73930966 +23 s23 31 s31/3 -4528.00262345 +23 s23 31 s31/6 -3396.31487831 +23 s23 31 s31/8 -3130.10792911 +23 s23 31 s31/10 -4470.28306039 +23 s23 32 s32/1 -4537.19613397 +23 s23 32 s32/3 -4949.68831805 +23 s23 32 s32/6 -4004.08246528 +23 s23 32 s32/8 -4583.91867321 +23 s23 32 s32/10 -3911.71276254 +23 s23 35 s35/1 -3178.23727789 +23 s23 35 s35/3 -4169.62277632 +23 s23 35 s35/6 -3801.6848293 +23 s23 35 s35/8 -3398.16793702 +23 s23 35 s35/10 -3728.28743801 +23 s23 37 s37/1 -5014.94351534 +23 s23 37 s37/3 -5172.0063639 +23 s23 37 s37/6 -5156.52421938 +23 s23 37 s37/8 -4788.3829074 +23 s23 37 s37/10 -5104.5348761 +23 s23 38 s38/1 -1880.96858467 +23 s23 38 s38/3 -2573.59823519 +23 s23 38 s38/6 -1714.16722371 +23 s23 38 s38/8 -2167.66742222 +23 s23 38 s38/10 -1955.26863906 +23 s23 40 s40/1 -3445.08418791 +23 s23 40 s40/3 -3641.3180666 +23 s23 40 s40/6 -3453.03156199 +23 s23 40 s40/8 -3560.2184106 +23 s23 40 s40/10 -3218.5535354 +25 s25 3 s3/1 -2329.44030111 +25 s25 3 s3/3 -2840.82679839 +25 s25 3 s3/6 -2617.51310471 +25 s25 3 s3/8 -2589.40533444 +25 s25 3 s3/10 -3131.96090955 +25 s25 4 s4/1 -2341.42599985 +25 s25 4 s4/3 -2138.24343048 +25 s25 4 s4/6 -2588.53367105 +25 s25 4 s4/8 -2112.51058765 +25 s25 4 s4/10 -3405.71001087 +25 s25 7 s7/1 -4405.81440483 +25 s25 7 s7/3 -4315.60479214 +25 s25 7 s7/6 -4059.91436578 +25 s25 7 s7/8 -4347.02735436 +25 s25 7 s7/10 -4085.14799994 +25 s25 8 s8/1 -3964.4355233 +25 s25 8 s8/3 -3848.83262637 +25 s25 8 s8/6 -3972.95654206 +25 s25 8 s8/8 -3711.48917503 +25 s25 8 s8/10 -3858.17849827 +25 s25 9 s9/1 -3333.50104347 +25 s25 9 s9/3 -3143.60390272 +25 s25 9 s9/6 -3055.56925526 +25 s25 9 s9/8 -2993.60713502 +25 s25 9 s9/10 -3472.42961378 +25 s25 13 s13/1 -2481.39989591 +25 s25 13 s13/3 -3310.77716289 +25 s25 13 s13/6 -2880.99606547 +25 s25 13 s13/8 -2766.27796515 +25 s25 13 s13/10 -2532.27222606 +25 s25 15 s15/1 -3279.68222934 +25 s25 15 s15/3 -3377.99742875 +25 s25 15 s15/6 -3150.34334081 +25 s25 15 s15/8 -3544.02251423 +25 s25 15 s15/10 -2544.41193594 +25 s25 18 s18/1 -3428.56105084 +25 s25 18 s18/3 -2314.42745202 +25 s25 18 s18/6 -2886.36192677 +25 s25 18 s18/8 -2545.05739956 +25 s25 18 s18/10 -2908.12292822 +25 s25 19 s19/1 -3343.86910217 +25 s25 19 s19/3 -3543.28909774 +25 s25 19 s19/6 -3365.40096021 +25 s25 19 s19/8 -3876.75857854 +25 s25 19 s19/10 -3189.69426311 +25 s25 22 s22/1 -4304.68450911 +25 s25 22 s22/3 -4163.02903211 +25 s25 22 s22/6 -4817.65197756 +25 s25 22 s22/8 -4451.18722857 +25 s25 22 s22/10 -4471.29497265 +25 s25 23 s23/1 -3794.61832674 +25 s25 23 s23/3 -4168.8206655 +25 s25 23 s23/6 -3523.84366372 +25 s25 23 s23/8 -4313.06370365 +25 s25 23 s23/10 -3608.02088704 +25 s25 25 s25/1 -1838.60862847 +25 s25 25 s25/3 -1782.56863456 +25 s25 25 s25/6 -1216.40330853 +25 s25 25 s25/8 -1750.899971 +25 s25 25 s25/10 -1838.89845752 +25 s25 28 s28/1 -3634.10212113 +25 s25 28 s28/3 -3424.76087525 +25 s25 28 s28/6 -3470.36152622 +25 s25 28 s28/8 -3840.14976053 +25 s25 28 s28/10 -3294.02273488 +25 s25 30 s30/1 -3732.82801593 +25 s25 30 s30/3 -4034.50397355 +25 s25 30 s30/6 -3895.80456991 +25 s25 30 s30/8 -4159.03526867 +25 s25 30 s30/10 -3659.54249067 +25 s25 31 s31/1 -3770.18624237 +25 s25 31 s31/3 -3487.74961013 +25 s25 31 s31/6 -2903.11810446 +25 s25 31 s31/8 -3406.07700979 +25 s25 31 s31/10 -3491.37591069 +25 s25 32 s32/1 -3090.8704628 +25 s25 32 s32/3 -2982.2893244 +25 s25 32 s32/6 -2928.50863376 +25 s25 32 s32/8 -2970.6854678 +25 s25 32 s32/10 -2948.27100708 +25 s25 35 s35/1 -3170.61334149 +25 s25 35 s35/3 -2696.64961689 +25 s25 35 s35/6 -1972.04360821 +25 s25 35 s35/8 -2161.00210149 +25 s25 35 s35/10 -3099.22511213 +25 s25 37 s37/1 -3605.089065 +25 s25 37 s37/3 -3797.33965343 +25 s25 37 s37/6 -3754.47967655 +25 s25 37 s37/8 -3353.7051036 +25 s25 37 s37/10 -3503.75382349 +25 s25 38 s38/1 -3641.71938148 +25 s25 38 s38/3 -3350.24606883 +25 s25 38 s38/6 -3906.65418999 +25 s25 38 s38/8 -3910.46997475 +25 s25 38 s38/10 -3809.94789038 +25 s25 40 s40/1 -2884.1708444 +25 s25 40 s40/3 -3383.93941208 +25 s25 40 s40/6 -2857.00240553 +25 s25 40 s40/8 -2697.34629589 +25 s25 40 s40/10 -2657.30514148 +28 s28 3 s3/1 -3343.13203827 +28 s28 3 s3/3 -3479.74879865 +28 s28 3 s3/6 -3647.43620707 +28 s28 3 s3/8 -3523.3625319 +28 s28 3 s3/10 -3513.08010005 +28 s28 4 s4/1 -3536.27254189 +28 s28 4 s4/3 -3179.88974284 +28 s28 4 s4/6 -3287.28292174 +28 s28 4 s4/8 -3081.13132712 +28 s28 4 s4/10 -4084.05996736 +28 s28 7 s7/1 -4099.21523338 +28 s28 7 s7/3 -4161.40756193 +28 s28 7 s7/6 -3784.13515954 +28 s28 7 s7/8 -4253.64258383 +28 s28 7 s7/10 -3818.67816343 +28 s28 8 s8/1 -4332.70279236 +28 s28 8 s8/3 -4307.15653445 +28 s28 8 s8/6 -4173.91805596 +28 s28 8 s8/8 -4294.37274636 +28 s28 8 s8/10 -4255.55759304 +28 s28 9 s9/1 -4363.99319121 +28 s28 9 s9/3 -4119.6475689 +28 s28 9 s9/6 -4347.27499476 +28 s28 9 s9/8 -4355.09835002 +28 s28 9 s9/10 -4454.41667374 +28 s28 13 s13/1 -3427.68004988 +28 s28 13 s13/3 -3894.83224322 +28 s28 13 s13/6 -3518.23779878 +28 s28 13 s13/8 -3597.2422859 +28 s28 13 s13/10 -3331.20191065 +28 s28 15 s15/1 -2323.51302233 +28 s28 15 s15/3 -2362.00431219 +28 s28 15 s15/6 -2125.98012646 +28 s28 15 s15/8 -3053.4200304 +28 s28 15 s15/10 -3712.17094447 +28 s28 18 s18/1 -4130.08684075 +28 s28 18 s18/3 -3912.59060716 +28 s28 18 s18/6 -3915.74148171 +28 s28 18 s18/8 -3952.48281946 +28 s28 18 s18/10 -4313.03277019 +28 s28 19 s19/1 -2330.25832055 +28 s28 19 s19/3 -2587.91598855 +28 s28 19 s19/6 -2453.72496914 +28 s28 19 s19/8 -2614.40674008 +28 s28 19 s19/10 -2369.94510467 +28 s28 22 s22/1 -3586.97324551 +28 s28 22 s22/3 -3704.40336174 +28 s28 22 s22/6 -4209.35570582 +28 s28 22 s22/8 -3860.98889304 +28 s28 22 s22/10 -3711.03609186 +28 s28 23 s23/1 -4726.31138129 +28 s28 23 s23/3 -4879.52411067 +28 s28 23 s23/6 -4595.7550428 +28 s28 23 s23/8 -4931.96090397 +28 s28 23 s23/10 -4391.21594075 +28 s28 25 s25/1 -3802.92084037 +28 s28 25 s25/3 -3634.05810549 +28 s28 25 s25/6 -3465.07743388 +28 s28 25 s25/8 -3264.71440694 +28 s28 25 s25/10 -3666.63727597 +28 s28 28 s28/1 -2986.81952345 +28 s28 28 s28/3 -3081.51548619 +28 s28 28 s28/6 -2984.96527253 +28 s28 28 s28/8 -3279.0341711 +28 s28 28 s28/10 -2852.94390455 +28 s28 30 s30/1 -4583.97997175 +28 s28 30 s30/3 -4963.26130459 +28 s28 30 s30/6 -4652.29130916 +28 s28 30 s30/8 -4858.98844591 +28 s28 30 s30/10 -4539.14989958 +28 s28 31 s31/1 -4601.00652661 +28 s28 31 s31/3 -3130.82374316 +28 s28 31 s31/6 -3477.47758598 +28 s28 31 s31/8 -4159.77114721 +28 s28 31 s31/10 -3147.93322094 +28 s28 32 s32/1 -3170.92803926 +28 s28 32 s32/3 -3075.19829312 +28 s28 32 s32/6 -2584.91437959 +28 s28 32 s32/8 -2642.44907404 +28 s28 32 s32/10 -2362.34409511 +28 s28 35 s35/1 -4535.74623183 +28 s28 35 s35/3 -3186.07643383 +28 s28 35 s35/6 -3156.70592316 +28 s28 35 s35/8 -3493.69792028 +28 s28 35 s35/10 -3704.77841057 +28 s28 37 s37/1 -3406.47248485 +28 s28 37 s37/3 -3507.23804154 +28 s28 37 s37/6 -2084.05575339 +28 s28 37 s37/8 -1769.18045321 +28 s28 37 s37/10 -3134.97429258 +28 s28 38 s38/1 -4887.38217448 +28 s28 38 s38/3 -4504.3661083 +28 s28 38 s38/6 -5127.43366899 +28 s28 38 s38/8 -4986.48662022 +28 s28 38 s38/10 -4667.74987614 +28 s28 40 s40/1 -3958.09669873 +28 s28 40 s40/3 -4200.01409183 +28 s28 40 s40/6 -4210.01283002 +28 s28 40 s40/8 -3954.86517811 +28 s28 40 s40/10 -4202.50025715 +30 s30 3 s3/1 -3913.00733265 +30 s30 3 s3/3 -4345.05141324 +30 s30 3 s3/6 -4031.3020103 +30 s30 3 s3/8 -4218.16474898 +30 s30 3 s3/10 -4701.93820993 +30 s30 4 s4/1 -3481.8768697 +30 s30 4 s4/3 -3739.48900015 +30 s30 4 s4/6 -4692.20061636 +30 s30 4 s4/8 -3835.0624544 +30 s30 4 s4/10 -4319.02602269 +30 s30 7 s7/1 -4063.53450929 +30 s30 7 s7/3 -4139.64880935 +30 s30 7 s7/6 -4012.38820175 +30 s30 7 s7/8 -3830.81385156 +30 s30 7 s7/10 -4624.7437418 +30 s30 8 s8/1 -4619.44653813 +30 s30 8 s8/3 -4833.26913827 +30 s30 8 s8/6 -5224.74104042 +30 s30 8 s8/8 -4904.41346544 +30 s30 8 s8/10 -4847.99263946 +30 s30 9 s9/1 -2975.73424387 +30 s30 9 s9/3 -3139.78450061 +30 s30 9 s9/6 -3170.31878614 +30 s30 9 s9/8 -3313.98776978 +30 s30 9 s9/10 -3925.41954159 +30 s30 13 s13/1 -5798.30896077 +30 s30 13 s13/3 -6244.65250104 +30 s30 13 s13/6 -5926.20292869 +30 s30 13 s13/8 -6036.52752935 +30 s30 13 s13/10 -5783.59604252 +30 s30 15 s15/1 -3763.88171871 +30 s30 15 s15/3 -3689.04823233 +30 s30 15 s15/6 -3919.43102002 +30 s30 15 s15/8 -3318.33723667 +30 s30 15 s15/10 -3002.84890822 +30 s30 18 s18/1 -5962.32886757 +30 s30 18 s18/3 -5524.26290721 +30 s30 18 s18/6 -5772.92084517 +30 s30 18 s18/8 -5592.16865828 +30 s30 18 s18/10 -5499.46776906 +30 s30 19 s19/1 -5471.7855931 +30 s30 19 s19/3 -6047.05163418 +30 s30 19 s19/6 -5699.94451026 +30 s30 19 s19/8 -5979.04374791 +30 s30 19 s19/10 -5254.62480286 +30 s30 22 s22/1 -3146.86740793 +30 s30 22 s22/3 -2879.21295297 +30 s30 22 s22/6 -3061.91597599 +30 s30 22 s22/8 -3258.40420461 +30 s30 22 s22/10 -3761.46166507 +30 s30 23 s23/1 -3375.6338731 +30 s30 23 s23/3 -2978.92747129 +30 s30 23 s23/6 -2705.31036504 +30 s30 23 s23/8 -3598.22134369 +30 s30 23 s23/10 -3394.24856588 +30 s30 25 s25/1 -4041.15819454 +30 s30 25 s25/3 -4297.37052267 +30 s30 25 s25/6 -4308.49765575 +30 s30 25 s25/8 -4652.21834027 +30 s30 25 s25/10 -4336.26693869 +30 s30 28 s28/1 -6076.53361463 +30 s30 28 s28/3 -5816.51880993 +30 s30 28 s28/6 -5833.38920666 +30 s30 28 s28/8 -6053.47393294 +30 s30 28 s28/10 -5992.22370309 +30 s30 30 s30/1 -1695.33118524 +30 s30 30 s30/3 -1608.11413011 +30 s30 30 s30/6 -1499.75038695 +30 s30 30 s30/8 -825.90900339 +30 s30 30 s30/10 -1437.95656679 +30 s30 31 s31/1 -2356.43835638 +30 s30 31 s31/3 -4055.42384883 +30 s30 31 s31/6 -2919.51134664 +30 s30 31 s31/8 -2633.93536299 +30 s30 31 s31/10 -4006.795115 +30 s30 32 s32/1 -5481.03063405 +30 s30 32 s32/3 -5526.14236159 +30 s30 32 s32/6 -4775.53057542 +30 s30 32 s32/8 -5291.11139842 +30 s30 32 s32/10 -4528.57215715 +30 s30 35 s35/1 -3640.3288671 +30 s30 35 s35/3 -4208.79565148 +30 s30 35 s35/6 -4518.29965451 +30 s30 35 s35/8 -4062.94446209 +30 s30 35 s35/10 -4649.9587983 +30 s30 37 s37/1 -5984.78222918 +30 s30 37 s37/3 -6136.4322262 +30 s30 37 s37/6 -5474.86705904 +30 s30 37 s37/8 -4947.21766845 +30 s30 37 s37/10 -6085.5670564 +30 s30 38 s38/1 -3028.99255218 +30 s30 38 s38/3 -2918.55614479 +30 s30 38 s38/6 -3039.57294451 +30 s30 38 s38/8 -3207.95262708 +30 s30 38 s38/10 -2745.00190154 +30 s30 40 s40/1 -4634.95426544 +30 s30 40 s40/3 -5014.31076122 +30 s30 40 s40/6 -4476.16998797 +30 s30 40 s40/8 -4603.99325218 +30 s30 40 s40/10 -4357.37992428 +31 s31 3 s3/1 -3294.69415772 +31 s31 3 s3/3 -3557.88055283 +31 s31 3 s3/6 -3617.60373216 +31 s31 3 s3/8 -3736.1793475 +31 s31 3 s3/10 -4055.32742762 +31 s31 4 s4/1 -3043.46778458 +31 s31 4 s4/3 -3023.23998174 +31 s31 4 s4/6 -3728.16930154 +31 s31 4 s4/8 -2978.33707274 +31 s31 4 s4/10 -3803.69514613 +31 s31 7 s7/1 -3908.23309344 +31 s31 7 s7/3 -3946.16493716 +31 s31 7 s7/6 -3857.43168016 +31 s31 7 s7/8 -4039.50737097 +31 s31 7 s7/10 -3910.4052828 +31 s31 8 s8/1 -4523.85343244 +31 s31 8 s8/3 -4652.36177247 +31 s31 8 s8/6 -4903.43793328 +31 s31 8 s8/8 -4586.26265549 +31 s31 8 s8/10 -4635.5875901 +31 s31 9 s9/1 -3171.57454251 +31 s31 9 s9/3 -3068.93748052 +31 s31 9 s9/6 -3304.14498655 +31 s31 9 s9/8 -3462.79992375 +31 s31 9 s9/10 -3660.99143487 +31 s31 13 s13/1 -4425.26237254 +31 s31 13 s13/3 -4887.90456047 +31 s31 13 s13/6 -4543.10357587 +31 s31 13 s13/8 -4634.50875902 +31 s31 13 s13/10 -4423.75586687 +31 s31 15 s15/1 -2653.96880799 +31 s31 15 s15/3 -2674.72545803 +31 s31 15 s15/6 -2745.06735481 +31 s31 15 s15/8 -2346.42288294 +31 s31 15 s15/10 -2495.08709261 +31 s31 18 s18/1 -4789.84400569 +31 s31 18 s18/3 -4304.64348271 +31 s31 18 s18/6 -4618.95118142 +31 s31 18 s18/8 -4359.95159701 +31 s31 18 s18/10 -4574.80266252 +31 s31 19 s19/1 -3802.18582905 +31 s31 19 s19/3 -4279.32466407 +31 s31 19 s19/6 -4223.2929879 +31 s31 19 s19/8 -4694.10862641 +31 s31 19 s19/10 -3880.49209192 +31 s31 22 s22/1 -2743.51602101 +31 s31 22 s22/3 -2593.27686403 +31 s31 22 s22/6 -3133.32442951 +31 s31 22 s22/8 -2997.20411043 +31 s31 22 s22/10 -3149.36484519 +31 s31 23 s23/1 -3905.79070148 +31 s31 23 s23/3 -3679.30549599 +31 s31 23 s23/6 -3307.17298559 +31 s31 23 s23/8 -4001.95959155 +31 s31 23 s23/10 -3759.27839067 +31 s31 25 s25/1 -3366.66588954 +31 s31 25 s25/3 -3515.54391224 +31 s31 25 s25/6 -3318.17438283 +31 s31 25 s25/8 -3615.32411462 +31 s31 25 s25/10 -3476.17240873 +31 s31 28 s28/1 -4713.20512491 +31 s31 28 s28/3 -4579.26031206 +31 s31 28 s28/6 -4544.75232505 +31 s31 28 s28/8 -4801.17980935 +31 s31 28 s28/10 -4593.27737246 +31 s31 30 s30/1 -2674.14867654 +31 s31 30 s30/3 -3005.96043866 +31 s31 30 s30/6 -2829.01846893 +31 s31 30 s30/8 -2483.52177124 +31 s31 30 s30/10 -2549.22458936 +31 s31 31 s31/1 -2724.2754152 +31 s31 31 s31/3 -1857.41403824 +31 s31 31 s31/6 -1973.44433813 +31 s31 31 s31/8 -2513.49716235 +31 s31 31 s31/10 -1820.97103732 +31 s31 32 s32/1 -3973.23686415 +31 s31 32 s32/3 -3943.5738161 +31 s31 32 s32/6 -3606.32094631 +31 s31 32 s32/8 -3785.05453983 +31 s31 32 s32/10 -3356.11317668 +31 s31 35 s35/1 -3137.66816407 +31 s31 35 s35/3 -2852.55321543 +31 s31 35 s35/6 -3241.79608545 +31 s31 35 s35/8 -3022.29091214 +31 s31 35 s35/10 -3552.58870649 +31 s31 37 s37/1 -4703.79279182 +31 s31 37 s37/3 -4833.07734018 +31 s31 37 s37/6 -3907.52926699 +31 s31 37 s37/8 -3487.72961561 +31 s31 37 s37/10 -4719.02596974 +31 s31 38 s38/1 -3804.69487163 +31 s31 38 s38/3 -3545.79490704 +31 s31 38 s38/6 -3960.3768924 +31 s31 38 s38/8 -3950.49614872 +31 s31 38 s38/10 -3699.42709121 +31 s31 40 s40/1 -3886.98211706 +31 s31 40 s40/3 -4191.18238079 +31 s31 40 s40/6 -4066.15707928 +31 s31 40 s40/8 -3980.62440027 +31 s31 40 s40/10 -3984.41323747 +32 s32 3 s3/1 -3481.44865816 +32 s32 3 s3/3 -3595.59422267 +32 s32 3 s3/6 -3340.32436965 +32 s32 3 s3/8 -3530.55916379 +32 s32 3 s3/10 -3733.86113116 +32 s32 4 s4/1 -3415.99834875 +32 s32 4 s4/3 -3352.85775891 +32 s32 4 s4/6 -3257.52441401 +32 s32 4 s4/8 -3216.48660203 +32 s32 4 s4/10 -3879.77419768 +32 s32 7 s7/1 -3996.80171914 +32 s32 7 s7/3 -3800.22323738 +32 s32 7 s7/6 -3599.63763993 +32 s32 7 s7/8 -4023.09287769 +32 s32 7 s7/10 -3723.8961306 +32 s32 8 s8/1 -3927.44454704 +32 s32 8 s8/3 -3676.39887399 +32 s32 8 s8/6 -3720.73898374 +32 s32 8 s8/8 -3447.80882094 +32 s32 8 s8/10 -3643.68488641 +32 s32 9 s9/1 -4359.49267419 +32 s32 9 s9/3 -4222.77898444 +32 s32 9 s9/6 -4216.79980363 +32 s32 9 s9/8 -4140.4437327 +32 s32 9 s9/10 -4450.82974639 +32 s32 13 s13/1 -3308.04268181 +32 s32 13 s13/3 -3580.13299752 +32 s32 13 s13/6 -3159.09017895 +32 s32 13 s13/8 -3283.76704583 +32 s32 13 s13/10 -3080.31334708 +32 s32 15 s15/1 -2398.62231509 +32 s32 15 s15/3 -2503.02526136 +32 s32 15 s15/6 -2209.21900396 +32 s32 15 s15/8 -3036.37839137 +32 s32 15 s15/10 -3490.34409742 +32 s32 18 s18/1 -3303.33083543 +32 s32 18 s18/3 -2913.41746349 +32 s32 18 s18/6 -3008.40792755 +32 s32 18 s18/8 -2873.03663611 +32 s32 18 s18/10 -3197.93494951 +32 s32 19 s19/1 -2619.90662239 +32 s32 19 s19/3 -2734.07164667 +32 s32 19 s19/6 -3126.62695763 +32 s32 19 s19/8 -2986.49752003 +32 s32 19 s19/10 -2953.1627146 +32 s32 22 s22/1 -4760.38387621 +32 s32 22 s22/3 -4753.34213918 +32 s32 22 s22/6 -5278.21922142 +32 s32 22 s22/8 -5031.68731869 +32 s32 22 s22/10 -5008.58954608 +32 s32 23 s23/1 -4424.88536858 +32 s32 23 s23/3 -4720.8973672 +32 s32 23 s23/6 -4350.28166904 +32 s32 23 s23/8 -4771.40699913 +32 s32 23 s23/10 -4202.95712702 +32 s32 25 s25/1 -3402.83132332 +32 s32 25 s25/3 -3225.41484415 +32 s32 25 s25/6 -3027.31174396 +32 s32 25 s25/8 -3207.78734977 +32 s32 25 s25/10 -3260.90211767 +32 s32 28 s28/1 -4262.18547504 +32 s32 28 s28/3 -4313.88973205 +32 s32 28 s28/6 -4300.78708628 +32 s32 28 s28/8 -4384.79956853 +32 s32 28 s28/10 -3808.79171646 +32 s32 30 s30/1 -4586.57713103 +32 s32 30 s30/3 -4857.61993231 +32 s32 30 s30/6 -4608.97429863 +32 s32 30 s30/8 -4894.14196906 +32 s32 30 s30/10 -4530.84126705 +32 s32 31 s31/1 -4965.28305801 +32 s32 31 s31/3 -3232.97665263 +32 s32 31 s31/6 -4109.43022166 +32 s32 31 s31/8 -4700.69670199 +32 s32 31 s31/10 -3158.6222623 +32 s32 32 s32/1 -1400.04142319 +32 s32 32 s32/3 -1471.63862249 +32 s32 32 s32/6 -1516.39381803 +32 s32 32 s32/8 -1179.08179137 +32 s32 32 s32/10 -1606.25051683 +32 s32 35 s35/1 -3998.48265398 +32 s32 35 s35/3 -3357.37138441 +32 s32 35 s35/6 -2802.69294465 +32 s32 35 s35/8 -3137.78371976 +32 s32 35 s35/10 -3394.4396583 +32 s32 37 s37/1 -4383.78071256 +32 s32 37 s37/3 -4454.22960435 +32 s32 37 s37/6 -3651.92757765 +32 s32 37 s37/8 -3432.14617407 +32 s32 37 s37/10 -4075.51765463 +32 s32 38 s38/1 -4684.65223915 +32 s32 38 s38/3 -4481.2456882 +32 s32 38 s38/6 -4819.61377814 +32 s32 38 s38/8 -4752.66048128 +32 s32 38 s38/10 -4679.25783168 +32 s32 40 s40/1 -3713.20737165 +32 s32 40 s40/3 -3993.88791391 +32 s32 40 s40/6 -3706.94187692 +32 s32 40 s40/8 -3660.09483497 +32 s32 40 s40/10 -3638.98252641 +35 s35 3 s3/1 -2629.99743718 +35 s35 3 s3/3 -2728.48998423 +35 s35 3 s3/6 -2929.77990244 +35 s35 3 s3/8 -2737.72206345 +35 s35 3 s3/10 -2949.71829906 +35 s35 4 s4/1 -2601.23631638 +35 s35 4 s4/3 -2396.55979124 +35 s35 4 s4/6 -2546.29151109 +35 s35 4 s4/8 -2339.13926292 +35 s35 4 s4/10 -3324.81878496 +35 s35 7 s7/1 -3913.13111744 +35 s35 7 s7/3 -3876.07567135 +35 s35 7 s7/6 -3672.47456635 +35 s35 7 s7/8 -3980.36207192 +35 s35 7 s7/10 -3347.45454423 +35 s35 8 s8/1 -4038.67376066 +35 s35 8 s8/3 -3806.1353599 +35 s35 8 s8/6 -3898.74319573 +35 s35 8 s8/8 -3816.06122627 +35 s35 8 s8/10 -3849.60319515 +35 s35 9 s9/1 -3502.24046593 +35 s35 9 s9/3 -3385.56018459 +35 s35 9 s9/6 -3406.93863815 +35 s35 9 s9/8 -3107.60749355 +35 s35 9 s9/10 -3389.4402753 +35 s35 13 s13/1 -2624.28110155 +35 s35 13 s13/3 -2765.94302571 +35 s35 13 s13/6 -2543.86600788 +35 s35 13 s13/8 -2650.98496007 +35 s35 13 s13/10 -2343.05172093 +35 s35 15 s15/1 -2993.10453694 +35 s35 15 s15/3 -3076.91109514 +35 s35 15 s15/6 -2861.95651434 +35 s35 15 s15/8 -3031.66118545 +35 s35 15 s15/10 -2109.33741856 +35 s35 18 s18/1 -3035.49730933 +35 s35 18 s18/3 -2313.33089252 +35 s35 18 s18/6 -2511.11161463 +35 s35 18 s18/8 -2454.69728093 +35 s35 18 s18/10 -2654.99253428 +35 s35 19 s19/1 -3399.99579481 +35 s35 19 s19/3 -3545.84878311 +35 s35 19 s19/6 -3342.75380654 +35 s35 19 s19/8 -3644.82417017 +35 s35 19 s19/10 -3342.46548391 +35 s35 22 s22/1 -4144.58588782 +35 s35 22 s22/3 -4013.39977843 +35 s35 22 s22/6 -4569.5954763 +35 s35 22 s22/8 -4253.70722731 +35 s35 22 s22/10 -4172.92650511 +35 s35 23 s23/1 -3879.24107414 +35 s35 23 s23/3 -4182.86068514 +35 s35 23 s23/6 -3826.88461692 +35 s35 23 s23/8 -4164.38029282 +35 s35 23 s23/10 -3700.40739818 +35 s35 25 s25/1 -2353.51220217 +35 s35 25 s25/3 -2351.75940108 +35 s35 25 s25/6 -2215.93558444 +35 s35 25 s25/8 -2281.75100329 +35 s35 25 s25/10 -2396.53146639 +35 s35 28 s28/1 -3242.62293578 +35 s35 28 s28/3 -3145.54405433 +35 s35 28 s28/6 -3161.69901133 +35 s35 28 s28/8 -3460.48280145 +35 s35 28 s28/10 -3130.20867157 +35 s35 30 s30/1 -3719.69872843 +35 s35 30 s30/3 -4033.57701225 +35 s35 30 s30/6 -3835.96540364 +35 s35 30 s30/8 -4213.43393094 +35 s35 30 s30/10 -3737.83513544 +35 s35 31 s31/1 -3637.87436761 +35 s35 31 s31/3 -3257.6985864 +35 s35 31 s31/6 -2823.29980411 +35 s35 31 s31/8 -3301.15243938 +35 s35 31 s31/10 -3281.1310619 +35 s35 32 s32/1 -2982.21528736 +35 s35 32 s32/3 -3153.57772893 +35 s35 32 s32/6 -2910.44123827 +35 s35 32 s32/8 -2934.4008954 +35 s35 32 s32/10 -2908.80485422 +35 s35 35 s35/1 -3027.39385142 +35 s35 35 s35/3 -1977.74812817 +35 s35 35 s35/6 -1777.94978034 +35 s35 35 s35/8 -1726.81146917 +35 s35 35 s35/10 -2337.52098854 +35 s35 37 s37/1 -3083.80116802 +35 s35 37 s37/3 -3175.91404615 +35 s35 37 s37/6 -3564.29392185 +35 s35 37 s37/8 -3242.77652296 +35 s35 37 s37/10 -3104.98121563 +35 s35 38 s38/1 -3949.35061046 +35 s35 38 s38/3 -3787.29739957 +35 s35 38 s38/6 -4217.60402972 +35 s35 38 s38/8 -3878.23065452 +35 s35 38 s38/10 -3938.91071819 +35 s35 40 s40/1 -2492.86221414 +35 s35 40 s40/3 -2685.54559886 +35 s35 40 s40/6 -2855.14417866 +35 s35 40 s40/8 -2565.77623868 +35 s35 40 s40/10 -3047.82986247 +37 s37 3 s3/1 -3347.73193542 +37 s37 3 s3/3 -3386.29089298 +37 s37 3 s3/6 -4145.74220476 +37 s37 3 s3/8 -3841.49225099 +37 s37 3 s3/10 -3708.19810549 +37 s37 4 s4/1 -3992.94431208 +37 s37 4 s4/3 -3674.34102399 +37 s37 4 s4/6 -4056.12617671 +37 s37 4 s4/8 -3687.67324754 +37 s37 4 s4/10 -4723.12608509 +37 s37 7 s7/1 -4671.00523462 +37 s37 7 s7/3 -4852.12652774 +37 s37 7 s7/6 -4358.69169597 +37 s37 7 s7/8 -4761.07266948 +37 s37 7 s7/10 -4244.93718081 +37 s37 8 s8/1 -4888.13275433 +37 s37 8 s8/3 -5222.4471334 +37 s37 8 s8/6 -4989.53297198 +37 s37 8 s8/8 -5380.61437698 +37 s37 8 s8/10 -5245.10245345 +37 s37 9 s9/1 -4461.97197329 +37 s37 9 s9/3 -4317.86362434 +37 s37 9 s9/6 -4763.27936789 +37 s37 9 s9/8 -4706.75225409 +37 s37 9 s9/10 -4762.90492801 +37 s37 13 s13/1 -2705.98850595 +37 s37 13 s13/3 -3492.47406384 +37 s37 13 s13/6 -3208.28121704 +37 s37 13 s13/8 -3204.92184035 +37 s37 13 s13/10 -2846.81650282 +37 s37 15 s15/1 -3475.5819192 +37 s37 15 s15/3 -3500.44254169 +37 s37 15 s15/6 -3253.21773129 +37 s37 15 s15/8 -3869.45696446 +37 s37 15 s15/10 -3735.74466224 +37 s37 18 s18/1 -4248.18462448 +37 s37 18 s18/3 -3835.2689915 +37 s37 18 s18/6 -3988.82120835 +37 s37 18 s18/8 -4000.35744946 +37 s37 18 s18/10 -4415.8952017 +37 s37 19 s19/1 -3428.65549423 +37 s37 19 s19/3 -3334.64597979 +37 s37 19 s19/6 -2745.93723939 +37 s37 19 s19/8 -3126.11526158 +37 s37 19 s19/10 -3246.85900974 +37 s37 22 s22/1 -3802.08835708 +37 s37 22 s22/3 -3898.95474126 +37 s37 22 s22/6 -4369.19801658 +37 s37 22 s22/8 -3907.1245176 +37 s37 22 s22/10 -3607.64737813 +37 s37 23 s23/1 -5205.00445868 +37 s37 23 s23/3 -5168.54275138 +37 s37 23 s23/6 -4980.94796855 +37 s37 23 s23/8 -5350.01537911 +37 s37 23 s23/10 -4959.9234081 +37 s37 25 s25/1 -4059.25815544 +37 s37 25 s25/3 -3953.32278429 +37 s37 25 s25/6 -3640.25144807 +37 s37 25 s25/8 -3478.25513417 +37 s37 25 s25/10 -3985.58588488 +37 s37 28 s28/1 -1770.3525039 +37 s37 28 s28/3 -1862.35119548 +37 s37 28 s28/6 -1796.32858027 +37 s37 28 s28/8 -2230.13715335 +37 s37 28 s28/10 -1843.95641805 +37 s37 30 s30/1 -5135.49776734 +37 s37 30 s30/3 -5424.60823062 +37 s37 30 s30/6 -5200.91129295 +37 s37 30 s30/8 -5356.54450147 +37 s37 30 s30/10 -5130.36181483 +37 s37 31 s31/1 -4813.52373089 +37 s37 31 s31/3 -3874.07295501 +37 s37 31 s31/6 -3843.42289871 +37 s37 31 s31/8 -4411.64509181 +37 s37 31 s31/10 -3863.04735893 +37 s37 32 s32/1 -3947.16038218 +37 s37 32 s32/3 -3669.46229069 +37 s37 32 s32/6 -3563.89629466 +37 s37 32 s32/8 -3431.84465293 +37 s37 32 s32/10 -3416.12471004 +37 s37 35 s35/1 -4310.62579244 +37 s37 35 s35/3 -2845.25367679 +37 s37 35 s35/6 -3678.21231785 +37 s37 35 s35/8 -3958.77686193 +37 s37 35 s35/10 -3708.69894331 +37 s37 37 s37/1 -2026.73809469 +37 s37 37 s37/3 -2076.5065985 +37 s37 37 s37/6 -1322.12745022 +37 s37 37 s37/8 -1420.40271347 +37 s37 37 s37/10 -1799.09150143 +37 s37 38 s38/1 -5194.52366806 +37 s37 38 s38/3 -4756.94476628 +37 s37 38 s38/6 -5457.50111132 +37 s37 38 s38/8 -5315.70013416 +37 s37 38 s38/10 -4868.01182272 +37 s37 40 s40/1 -3517.01393705 +37 s37 40 s40/3 -4115.52328612 +37 s37 40 s40/6 -3826.76525207 +37 s37 40 s40/8 -3550.5571365 +37 s37 40 s40/10 -3838.17065346 +38 s38 3 s3/1 -2500.66524809 +38 s38 3 s3/3 -3113.76487532 +38 s38 3 s3/6 -2268.34645822 +38 s38 3 s3/8 -2518.65944776 +38 s38 3 s3/10 -3312.4448462 +38 s38 4 s4/1 -2358.3472841 +38 s38 4 s4/3 -2820.58463101 +38 s38 4 s4/6 -3767.53975525 +38 s38 4 s4/8 -2905.51038405 +38 s38 4 s4/10 -3364.95835537 +38 s38 7 s7/1 -3079.51500683 +38 s38 7 s7/3 -2995.94686187 +38 s38 7 s7/6 -2728.64006669 +38 s38 7 s7/8 -2632.18971995 +38 s38 7 s7/10 -3580.2942623 +38 s38 8 s8/1 -3401.48475841 +38 s38 8 s8/3 -3170.84565396 +38 s38 8 s8/6 -3565.07308101 +38 s38 8 s8/8 -3542.05330799 +38 s38 8 s8/10 -3205.57917872 +38 s38 9 s9/1 -2443.45811206 +38 s38 9 s9/3 -2624.20317848 +38 s38 9 s9/6 -2452.88289599 +38 s38 9 s9/8 -2045.23427053 +38 s38 9 s9/10 -3276.71105312 +38 s38 13 s13/1 -4721.97426652 +38 s38 13 s13/3 -5226.71057651 +38 s38 13 s13/6 -4680.83782604 +38 s38 13 s13/8 -4765.99705531 +38 s38 13 s13/10 -4423.14289953 +38 s38 15 s15/1 -3688.28384289 +38 s38 15 s15/3 -3598.51972277 +38 s38 15 s15/6 -3768.57386495 +38 s38 15 s15/8 -3455.04650083 +38 s38 15 s15/10 -2655.02750604 +38 s38 18 s18/1 -4745.50875736 +38 s38 18 s18/3 -4292.87295517 +38 s38 18 s18/6 -4286.22959369 +38 s38 18 s18/8 -4323.9459001 +38 s38 18 s18/10 -4070.24822599 +38 s38 19 s19/1 -5065.02813215 +38 s38 19 s19/3 -5596.88172312 +38 s38 19 s19/6 -5112.50499266 +38 s38 19 s19/8 -5196.17038292 +38 s38 19 s19/10 -4680.31338835 +38 s38 22 s22/1 -4021.19787287 +38 s38 22 s22/3 -3786.51071329 +38 s38 22 s22/6 -4126.76659422 +38 s38 22 s22/8 -4065.28029675 +38 s38 22 s22/10 -4500.77994993 +38 s38 23 s23/1 -1661.15610539 +38 s38 23 s23/3 -3004.62043703 +38 s38 23 s23/6 -2592.15772151 +38 s38 23 s23/8 -2839.53533334 +38 s38 23 s23/10 -1886.64429816 +38 s38 25 s25/1 -2759.63230835 +38 s38 25 s25/3 -3053.91603984 +38 s38 25 s25/6 -3286.6060079 +38 s38 25 s25/8 -3919.08978822 +38 s38 25 s25/10 -3123.42430915 +38 s38 28 s28/1 -4986.3941653 +38 s38 28 s28/3 -4693.8398904 +38 s38 28 s28/6 -4733.98872901 +38 s38 28 s28/8 -5112.93431814 +38 s38 28 s28/10 -4951.60499646 +38 s38 30 s30/1 -2171.70657427 +38 s38 30 s30/3 -2248.55987093 +38 s38 30 s30/6 -2181.24702757 +38 s38 30 s30/8 -3093.05158571 +38 s38 30 s30/10 -2149.11586703 +38 s38 31 s31/1 -2676.45733009 +38 s38 31 s31/3 -4915.56732116 +38 s38 31 s31/6 -3152.65508137 +38 s38 31 s31/8 -2864.95806167 +38 s38 31 s31/10 -4942.57718181 +38 s38 32 s32/1 -4855.40392521 +38 s38 32 s32/3 -5162.90276935 +38 s38 32 s32/6 -3858.1984399 +38 s38 32 s32/8 -4687.73273849 +38 s38 32 s32/10 -3771.2787541 +38 s38 35 s35/1 -3397.84237105 +38 s38 35 s35/3 -4119.31301927 +38 s38 35 s35/6 -3394.96054168 +38 s38 35 s35/8 -3015.43872493 +38 s38 35 s35/10 -4064.95202992 +38 s38 37 s37/1 -4882.73064872 +38 s38 37 s37/3 -5081.54156869 +38 s38 37 s37/6 -5186.66678655 +38 s38 37 s37/8 -4640.2911261 +38 s38 37 s37/10 -4932.9113395 +38 s38 38 s38/1 -1436.2690717 +38 s38 38 s38/3 -1193.10987941 +38 s38 38 s38/6 -1871.70903439 +38 s38 38 s38/8 -1502.77950363 +38 s38 38 s38/10 -1295.39466213 +38 s38 40 s40/1 -3610.15958833 +38 s38 40 s40/3 -3930.3899188 +38 s38 40 s40/6 -3367.88066228 +38 s38 40 s40/8 -3469.37561895 +38 s38 40 s40/10 -3436.14514204 +40 s40 3 s3/1 -2651.09965589 +40 s40 3 s3/3 -2683.04351464 +40 s40 3 s3/6 -2445.93813943 +40 s40 3 s3/8 -2073.66669064 +40 s40 3 s3/10 -2813.14996979 +40 s40 4 s4/1 -2568.59239584 +40 s40 4 s4/3 -2532.61350347 +40 s40 4 s4/6 -2594.61908498 +40 s40 4 s4/8 -2621.96322247 +40 s40 4 s4/10 -3338.43480092 +40 s40 7 s7/1 -3678.20163099 +40 s40 7 s7/3 -3596.8945058 +40 s40 7 s7/6 -3396.75831689 +40 s40 7 s7/8 -3567.20188339 +40 s40 7 s7/10 -3221.24213788 +40 s40 8 s8/1 -3715.39341458 +40 s40 8 s8/3 -3571.88906273 +40 s40 8 s8/6 -3730.13258897 +40 s40 8 s8/8 -3603.12267398 +40 s40 8 s8/10 -3590.12354748 +40 s40 9 s9/1 -3548.4965001 +40 s40 9 s9/3 -3472.79256194 +40 s40 9 s9/6 -2863.6915347 +40 s40 9 s9/8 -2720.70479404 +40 s40 9 s9/10 -3294.53578043 +40 s40 13 s13/1 -2815.20644872 +40 s40 13 s13/3 -2764.01526588 +40 s40 13 s13/6 -2694.45585779 +40 s40 13 s13/8 -2500.66028557 +40 s40 13 s13/10 -2249.42220386 +40 s40 15 s15/1 -3607.07793083 +40 s40 15 s15/3 -3681.10792076 +40 s40 15 s15/6 -3516.22845085 +40 s40 15 s15/8 -3790.99726558 +40 s40 15 s15/10 -2371.56146064 +40 s40 18 s18/1 -2885.25365973 +40 s40 18 s18/3 -1730.26525228 +40 s40 18 s18/6 -1920.5352865 +40 s40 18 s18/8 -2041.83010019 +40 s40 18 s18/10 -1902.29679874 +40 s40 19 s19/1 -4146.34040048 +40 s40 19 s19/3 -4291.00986689 +40 s40 19 s19/6 -4104.42545501 +40 s40 19 s19/8 -4078.28359243 +40 s40 19 s19/10 -3964.82241087 +40 s40 22 s22/1 -4923.93362995 +40 s40 22 s22/3 -4790.15479765 +40 s40 22 s22/6 -5163.44878234 +40 s40 22 s22/8 -5045.57023204 +40 s40 22 s22/10 -5077.34842893 +40 s40 23 s23/1 -3195.09963137 +40 s40 23 s23/3 -4083.00238199 +40 s40 23 s23/6 -3343.03813699 +40 s40 23 s23/8 -3692.5758183 +40 s40 23 s23/10 -2921.14528812 +40 s40 25 s25/1 -2474.2456049 +40 s40 25 s25/3 -2495.90369101 +40 s40 25 s25/6 -2700.66256782 +40 s40 25 s25/8 -2093.23218401 +40 s40 25 s25/10 -2753.63733789 +40 s40 28 s28/1 -3607.32239622 +40 s40 28 s28/3 -3523.64440717 +40 s40 28 s28/6 -3508.00347721 +40 s40 28 s28/8 -3794.96537331 +40 s40 28 s28/10 -3545.02350553 +40 s40 30 s30/1 -4117.68401116 +40 s40 30 s30/3 -4318.14358145 +40 s40 30 s30/6 -3970.30405567 +40 s40 30 s30/8 -4663.03394225 +40 s40 30 s30/10 -4114.2734629 +40 s40 31 s31/1 -3883.11730819 +40 s40 31 s31/3 -4347.05405545 +40 s40 31 s31/6 -3585.00166747 +40 s40 31 s31/8 -3752.95802879 +40 s40 31 s31/10 -4361.37878865 +40 s40 32 s32/1 -3198.90321628 +40 s40 32 s32/3 -3536.7907758 +40 s40 32 s32/6 -3207.0830193 +40 s40 32 s32/8 -3269.19701762 +40 s40 32 s32/10 -3209.67847964 +40 s40 35 s35/1 -3144.80178138 +40 s40 35 s35/3 -2695.41443799 +40 s40 35 s35/6 -2639.71050693 +40 s40 35 s35/8 -2324.91676937 +40 s40 35 s35/10 -2033.60969477 +40 s40 37 s37/1 -3242.39681112 +40 s40 37 s37/3 -3311.51818371 +40 s40 37 s37/6 -4308.81184137 +40 s40 37 s37/8 -3954.90331952 +40 s40 37 s37/10 -3302.59396222 +40 s40 38 s38/1 -3399.74494682 +40 s40 38 s38/3 -3670.11719236 +40 s40 38 s38/6 -3704.4046877 +40 s40 38 s38/8 -3711.69159941 +40 s40 38 s38/10 -3659.77792774 +40 s40 40 s40/1 -2186.09198446 +40 s40 40 s40/3 -2228.13430956 +40 s40 40 s40/6 -2470.78602967 +40 s40 40 s40/8 -2214.25145046 +40 s40 40 s40/10 -2276.02148295 diff --git a/bob/bio/base/test/data/scores.mask b/bob/bio/base/test/data/scores.mask new file mode 100644 index 0000000000000000000000000000000000000000..287c3f4dd2529898ffb161538333f16763a770a1 --- /dev/null +++ b/bob/bio/base/test/data/scores.mask @@ -0,0 +1,5 @@ +S2 +unknown-gallery.lst +unknown-probe.lst +MB 100 20 xV4 +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/bob/bio/base/test/data/scores.mtx b/bob/bio/base/test/data/scores.mtx new file mode 100644 index 0000000000000000000000000000000000000000..e148dbf80e4699b8bec08bcf34a88cb2a9cbde59 Binary files /dev/null and b/bob/bio/base/test/data/scores.mtx differ diff --git a/bob/bio/base/test/data/search.mask b/bob/bio/base/test/data/search.mask new file mode 100644 index 0000000000000000000000000000000000000000..46ac522954d5eefa938bb579f0df8a32ccc69330 Binary files /dev/null and b/bob/bio/base/test/data/search.mask differ diff --git a/bob/bio/base/test/data/search.mtx b/bob/bio/base/test/data/search.mtx new file mode 100644 index 0000000000000000000000000000000000000000..5b0872e0667b3cc6210378d24ff74d710ec47003 Binary files /dev/null and b/bob/bio/base/test/data/search.mtx differ diff --git a/bob/bio/base/test/data/test-4col.txt b/bob/bio/base/test/data/test-4col.txt new file mode 100644 index 0000000000000000000000000000000000000000..3cc4dfeae1fcf413808e118a85d874d8d5849777 --- /dev/null +++ b/bob/bio/base/test/data/test-4col.txt @@ -0,0 +1,910 @@ +f_1014 f_1014 x 0.175237 +f_1014 f_1014 x 0.304839 +f_1014 f_1014 x 0.256713 +f_1014 f_1014 x 0.37347 +f_1014 f_1014 x 0.4842 +f_1014 f_1016 x -0.132795 +f_1014 f_1016 x -0.090261 +f_1014 f_1016 x -0.116631 +f_1014 f_1016 x -0.067892 +f_1014 f_1016 x -0.101526 +f_1015 f_1015 x 0.054443 +f_1015 f_1015 x 0.258395 +f_1015 f_1015 x 0.210023 +f_1015 f_1015 x 0.19985 +f_1015 f_1015 x 0.25951 +f_1015 f_1017 x -0.106891 +f_1015 f_1017 x -0.167279 +f_1015 f_1017 x -0.158916 +f_1015 f_1017 x -0.177507 +f_1015 f_1017 x -0.125337 +f_1016 f_1016 x 0.21881 +f_1016 f_1016 x 0.126132 +f_1016 f_1016 x 0.37815 +f_1016 f_1016 x 0.222685 +f_1016 f_1016 x 0.307243 +f_1016 f_1018 x -0.049229 +f_1016 f_1018 x -0.1148 +f_1016 f_1018 x -0.111412 +f_1016 f_1018 x -0.126608 +f_1016 f_1018 x -0.084573 +f_1017 f_1017 x -0.017341 +f_1017 f_1017 x 0.026926 +f_1017 f_1017 x 0.11222 +f_1017 f_1017 x 0.037274 +f_1017 f_1017 x 0.028239 +f_1017 f_1019 x -0.068405 +f_1017 f_1019 x -0.086171 +f_1017 f_1019 x -0.135923 +f_1017 f_1019 x -0.081824 +f_1017 f_1019 x -0.178919 +f_1018 f_1018 x 0.237832 +f_1018 f_1018 x 0.21383 +f_1018 f_1018 x 0.197277 +f_1018 f_1018 x 0.004259 +f_1018 f_1018 x 0.244453 +f_1018 f_1020 x -0.147546 +f_1018 f_1020 x -0.043125 +f_1018 f_1020 x -0.173616 +f_1018 f_1020 x -0.143199 +f_1018 f_1020 x -0.105378 +f_1019 f_1019 x 0.042442 +f_1019 f_1019 x 0.115268 +f_1019 f_1019 x 0.170583 +f_1019 f_1019 x 0.206193 +f_1019 f_1019 x 0.096731 +f_1019 f_1021 x -0.15031 +f_1019 f_1021 x -0.132395 +f_1019 f_1021 x -0.169058 +f_1019 f_1021 x -0.156056 +f_1019 f_1021 x -0.155288 +f_1020 f_1020 x 0.03643 +f_1020 f_1020 x 0.117264 +f_1020 f_1020 x 0.285537 +f_1020 f_1020 x 0.359734 +f_1020 f_1020 x 0.382881 +f_1020 f_1022 x 0.015456 +f_1020 f_1022 x -0.098693 +f_1020 f_1022 x 0.001723 +f_1020 f_1022 x -0.069837 +f_1020 f_1022 x 0.010294 +f_1021 f_1021 x 0.101494 +f_1021 f_1021 x 0.182224 +f_1021 f_1021 x 0.012012 +f_1021 f_1021 x 0.035786 +f_1021 f_1021 x 0.178588 +f_1021 f_1023 x -0.012187 +f_1021 f_1023 x -0.150579 +f_1021 f_1023 x -0.076234 +f_1021 f_1023 x -0.078789 +f_1021 f_1023 x -0.047604 +f_1022 f_1022 x 0.286642 +f_1022 f_1022 x -0.043404 +f_1022 f_1022 x 0.141256 +f_1022 f_1022 x 0.203942 +f_1022 f_1022 x 0.116838 +f_1022 f_1024 x -0.064643 +f_1022 f_1024 x -0.095398 +f_1022 f_1024 x -0.093624 +f_1022 f_1024 x -0.086501 +f_1022 f_1024 x -0.114908 +f_1023 f_1023 x 0.164015 +f_1023 f_1023 x 0.333836 +f_1023 f_1023 x 0.227632 +f_1023 f_1023 x 0.221866 +f_1023 f_1023 x 0.256993 +f_1023 f_1025 x -0.212049 +f_1023 f_1025 x -0.214593 +f_1023 f_1025 x -0.178651 +f_1023 f_1025 x -0.116316 +f_1023 f_1025 x -0.16932 +f_1024 f_1024 x 0.315482 +f_1024 f_1024 x 0.186705 +f_1024 f_1024 x 0.174492 +f_1024 f_1024 x 0.182486 +f_1024 f_1024 x 0.197654 +f_1024 f_1026 x -0.104582 +f_1024 f_1026 x -0.14075 +f_1024 f_1026 x -0.091511 +f_1024 f_1026 x -0.151864 +f_1024 f_1026 x -0.136013 +f_1025 f_1014 x -0.119154 +f_1025 f_1014 x -0.150153 +f_1025 f_1014 x -0.087496 +f_1025 f_1014 x -0.132967 +f_1025 f_1014 x -0.074032 +f_1025 f_1025 x -0.098941 +f_1025 f_1025 x -0.056289 +f_1025 f_1025 x -0.185361 +f_1025 f_1025 x 0.017452 +f_1025 f_1025 x 0.17846 +f_1026 f_1015 x -0.145975 +f_1026 f_1015 x -0.145888 +f_1026 f_1015 x -0.177149 +f_1026 f_1015 x -0.166486 +f_1026 f_1015 x -0.202473 +f_1026 f_1026 x 0.307376 +f_1026 f_1026 x 0.154666 +f_1026 f_1026 x 0.131216 +f_1026 f_1026 x 0.131029 +f_1026 f_1026 x 0.067151 +m_1040 m_1040 x 0.135275 +m_1040 m_1040 x 0.249472 +m_1040 m_1040 x 0.185975 +m_1040 m_1040 x 0.141155 +m_1040 m_1040 x 0.361171 +m_1040 m_1042 x -0.152226 +m_1040 m_1042 x -0.15413 +m_1040 m_1042 x -0.022675 +m_1040 m_1042 x -0.03507 +m_1040 m_1042 x -0.108974 +m_1041 m_1041 x 0.256448 +m_1041 m_1041 x 0.244108 +m_1041 m_1041 x 0.28142 +m_1041 m_1041 x 0.131366 +m_1041 m_1041 x 0.238593 +m_1041 m_1043 x -0.109183 +m_1041 m_1043 x -0.078833 +m_1041 m_1043 x -0.072502 +m_1041 m_1043 x -0.066688 +m_1041 m_1043 x -0.205101 +m_1042 m_1042 x 0.018683 +m_1042 m_1042 x 0.250633 +m_1042 m_1042 x 0.311741 +m_1042 m_1042 x 0.169665 +m_1042 m_1042 x 0.180004 +m_1042 m_1044 x -0.098772 +m_1042 m_1044 x -0.176161 +m_1042 m_1044 x -0.115254 +m_1042 m_1044 x -0.128812 +m_1042 m_1044 x -0.109547 +m_1043 m_1043 x 0.129869 +m_1043 m_1043 x 0.383131 +m_1043 m_1043 x 0.294704 +m_1043 m_1043 x 0.374444 +m_1043 m_1043 x 0.326108 +m_1043 m_1045 x -0.170887 +m_1043 m_1045 x -0.139108 +m_1043 m_1045 x -0.174187 +m_1043 m_1045 x -0.176998 +m_1043 m_1045 x -0.159841 +m_1044 m_1044 x 0.120106 +m_1044 m_1044 x 0.008721 +m_1044 m_1044 x 0.156735 +m_1044 m_1044 x 0.10402 +m_1044 m_1044 x 0.103297 +m_1044 m_1046 x -0.06416 +m_1044 m_1046 x -0.111405 +m_1044 m_1046 x -0.128987 +m_1044 m_1046 x -0.115382 +m_1044 m_1046 x -0.179751 +m_1045 m_1045 x 0.226013 +m_1045 m_1045 x 0.30898 +m_1045 m_1045 x 0.244402 +m_1045 m_1045 x 0.185819 +m_1045 m_1045 x 0.352065 +m_1045 m_1047 x -0.165835 +m_1045 m_1047 x -0.198608 +m_1045 m_1047 x -0.147002 +m_1045 m_1047 x -0.149473 +m_1045 m_1047 x -0.223582 +m_1046 m_1046 x 0.327642 +m_1046 m_1046 x 0.163479 +m_1046 m_1046 x 0.194457 +m_1046 m_1046 x 0.248568 +m_1046 m_1046 x 0.276627 +m_1046 m_1048 x -0.23229 +m_1046 m_1048 x -0.2629 +m_1046 m_1048 x -0.231205 +m_1046 m_1048 x -0.189854 +m_1046 m_1048 x -0.24022 +m_1047 m_1047 x 0.107771 +m_1047 m_1047 x 0.287596 +m_1047 m_1047 x 0.340219 +m_1047 m_1047 x 0.110695 +m_1047 m_1047 x 0.273247 +m_1047 m_1049 x -0.113823 +m_1047 m_1049 x -0.206661 +m_1047 m_1049 x -0.09003 +m_1047 m_1049 x -0.172021 +m_1047 m_1049 x -0.18018 +m_1048 m_1048 x 0.231718 +m_1048 m_1048 x 0.032567 +m_1048 m_1048 x 0.37068 +m_1048 m_1048 x 0.531794 +m_1048 m_1048 x 0.251853 +m_1048 m_1050 x -0.039807 +m_1048 m_1050 x -0.158791 +m_1048 m_1050 x -0.123597 +m_1048 m_1050 x -0.195967 +m_1048 m_1050 x -0.10318 +m_1049 m_1049 x 0.137166 +m_1049 m_1049 x 0.07881 +m_1049 m_1049 x 0.122634 +m_1049 m_1049 x 0.067998 +m_1049 m_1049 x 0.032458 +m_1049 m_1051 x -0.045168 +m_1049 m_1051 x -0.07624 +m_1049 m_1051 x -0.010425 +m_1049 m_1051 x -0.007416 +m_1049 m_1051 x -0.104273 +m_1050 m_1050 x 0.198104 +m_1050 m_1050 x 0.238023 +m_1050 m_1050 x 0.325879 +m_1050 m_1050 x 0.212732 +m_1050 m_1050 x 0.07356 +m_1050 m_1052 x -0.136036 +m_1050 m_1052 x -0.04766 +m_1050 m_1052 x -0.15562 +m_1050 m_1052 x -0.159182 +m_1050 m_1052 x -0.166221 +m_1051 m_1040 x -0.045368 +m_1051 m_1040 x -0.094739 +m_1051 m_1040 x -0.073475 +m_1051 m_1040 x -0.166177 +m_1051 m_1040 x -0.174827 +m_1051 m_1051 x 0.457431 +m_1051 m_1051 x 0.155697 +m_1051 m_1051 x 0.479951 +m_1051 m_1051 x 0.281574 +m_1051 m_1051 x 0.206361 +m_1052 m_1041 x -0.193203 +m_1052 m_1041 x -0.083981 +m_1052 m_1041 x -0.100523 +m_1052 m_1041 x -0.13021 +m_1052 m_1041 x -0.174762 +m_1052 m_1052 x 0.092376 +m_1052 m_1052 x 0.095863 +m_1052 m_1052 x 0.070707 +m_1052 m_1052 x 0.120926 +m_1052 m_1052 x 0.053403 +f_1014 f_1014 x 0.437731 +f_1014 f_1014 x 0.318402 +f_1014 f_1014 x 0.428893 +f_1014 f_1014 x 0.453113 +f_1014 f_1014 x 0.495515 +f_1014 f_1017 x -0.11742 +f_1014 f_1017 x -0.070269 +f_1014 f_1017 x -0.106312 +f_1014 f_1017 x -0.144875 +f_1014 f_1017 x -0.094553 +f_1015 f_1015 x 0.22944 +f_1015 f_1015 x 0.143853 +f_1015 f_1015 x 0.345441 +f_1015 f_1015 x 0.292318 +f_1015 f_1015 x 0.489542 +f_1015 f_1018 x -0.167798 +f_1015 f_1018 x -0.079764 +f_1015 f_1018 x -0.097843 +f_1015 f_1018 x -0.155892 +f_1015 f_1018 x -0.132385 +f_1016 f_1016 x 0.160622 +f_1016 f_1016 x 0.171162 +f_1016 f_1016 x 0.157513 +f_1016 f_1016 x 0.135925 +f_1016 f_1016 x 0.06149 +f_1016 f_1019 x -0.050159 +f_1016 f_1019 x -0.057178 +f_1016 f_1019 x -0.074997 +f_1016 f_1019 x -0.051324 +f_1016 f_1019 x -0.048703 +f_1017 f_1017 x 0.209104 +f_1017 f_1017 x 0.175552 +f_1017 f_1017 x 0.137198 +f_1017 f_1017 x 0.171513 +f_1017 f_1017 x 0.130996 +f_1017 f_1020 x -0.243561 +f_1017 f_1020 x -0.115798 +f_1017 f_1020 x -0.034842 +f_1017 f_1020 x -0.131362 +f_1017 f_1020 x -0.159915 +f_1018 f_1018 x -0.005463 +f_1018 f_1018 x 0.206381 +f_1018 f_1018 x 0.146986 +f_1018 f_1018 x 0.069634 +f_1018 f_1018 x 0.037562 +f_1018 f_1021 x -0.147572 +f_1018 f_1021 x -0.098223 +f_1018 f_1021 x -0.139565 +f_1018 f_1021 x -0.110759 +f_1018 f_1021 x -0.147047 +f_1019 f_1019 x 0.249895 +f_1019 f_1019 x 0.278538 +f_1019 f_1019 x 0.259574 +f_1019 f_1019 x 0.17637 +f_1019 f_1019 x 0.157258 +f_1019 f_1022 x -0.118328 +f_1019 f_1022 x -0.041292 +f_1019 f_1022 x -0.052633 +f_1019 f_1022 x -0.080992 +f_1019 f_1022 x -0.127107 +f_1020 f_1020 x 0.218971 +f_1020 f_1020 x 0.04365 +f_1020 f_1020 x 0.088146 +f_1020 f_1020 x 0.160735 +f_1020 f_1020 x 0.171037 +f_1020 f_1023 x -0.143461 +f_1020 f_1023 x -0.125433 +f_1020 f_1023 x -0.129891 +f_1020 f_1023 x -0.187145 +f_1020 f_1023 x -0.177769 +f_1021 f_1021 x -0.000116 +f_1021 f_1021 x 0.01191 +f_1021 f_1021 x -0.076906 +f_1021 f_1021 x -0.115962 +f_1021 f_1021 x -0.065717 +f_1021 f_1024 x -0.219317 +f_1021 f_1024 x -0.20047 +f_1021 f_1024 x -0.219448 +f_1021 f_1024 x -0.181918 +f_1021 f_1024 x -0.221209 +f_1022 f_1022 x 0.092949 +f_1022 f_1022 x 0.13708 +f_1022 f_1022 x 0.007386 +f_1022 f_1022 x 0.04151 +f_1022 f_1022 x 0.076811 +f_1022 f_1025 x -0.148761 +f_1022 f_1025 x -0.186116 +f_1022 f_1025 x -0.149164 +f_1022 f_1025 x -0.171441 +f_1022 f_1025 x -0.2179 +f_1023 f_1023 x 0.155696 +f_1023 f_1023 x 0.065824 +f_1023 f_1023 x 0.091544 +f_1023 f_1023 x 0.109188 +f_1023 f_1023 x 0.132669 +f_1023 f_1026 x -0.107141 +f_1023 f_1026 x -0.112328 +f_1023 f_1026 x -0.117225 +f_1023 f_1026 x -0.054713 +f_1023 f_1026 x -0.045185 +f_1024 f_1014 x -0.029009 +f_1024 f_1014 x -0.142735 +f_1024 f_1014 x -0.10747 +f_1024 f_1014 x -0.046912 +f_1024 f_1014 x -0.078291 +f_1024 f_1024 x 0.155625 +f_1024 f_1024 x 0.218861 +f_1024 f_1024 x 0.24453 +f_1024 f_1024 x 0.164316 +f_1024 f_1024 x 0.037576 +f_1025 f_1015 x -0.120623 +f_1025 f_1015 x -0.150187 +f_1025 f_1015 x -0.15106 +f_1025 f_1015 x -0.042806 +f_1025 f_1015 x -0.120825 +f_1025 f_1025 x 0.187759 +f_1025 f_1025 x 0.014105 +f_1025 f_1025 x 0.01868 +f_1025 f_1025 x 0.000269 +f_1025 f_1025 x 0.129064 +f_1026 f_1016 x -0.090137 +f_1026 f_1016 x -0.191546 +f_1026 f_1016 x -0.202833 +f_1026 f_1016 x -0.06334 +f_1026 f_1016 x -0.180062 +f_1026 f_1026 x 0.112111 +f_1026 f_1026 x 0.265684 +f_1026 f_1026 x 0.164375 +f_1026 f_1026 x 0.167411 +f_1026 f_1026 x 0.127449 +m_1040 m_1040 x 0.209957 +m_1040 m_1040 x 0.271467 +m_1040 m_1040 x 0.4301 +m_1040 m_1040 x 0.33632 +m_1040 m_1040 x 0.387182 +m_1040 m_1043 x -0.089345 +m_1040 m_1043 x -0.060908 +m_1040 m_1043 x -0.003329 +m_1040 m_1043 x -0.050925 +m_1040 m_1043 x -0.085675 +m_1041 m_1041 x 0.182627 +m_1041 m_1041 x 0.200762 +m_1041 m_1041 x 0.117049 +m_1041 m_1041 x 0.276846 +m_1041 m_1041 x 0.099233 +m_1041 m_1044 x -0.086125 +m_1041 m_1044 x -0.157261 +m_1041 m_1044 x -0.133127 +m_1041 m_1044 x -0.054866 +m_1041 m_1044 x -0.076243 +m_1042 m_1042 x 0.07247 +m_1042 m_1042 x 0.247412 +m_1042 m_1042 x 0.15837 +m_1042 m_1042 x 0.178847 +m_1042 m_1042 x 0.24374 +m_1042 m_1045 x -0.140707 +m_1042 m_1045 x -0.079508 +m_1042 m_1045 x -0.143072 +m_1042 m_1045 x -0.150436 +m_1042 m_1045 x -0.106972 +m_1043 m_1043 x 0.173801 +m_1043 m_1043 x 0.218501 +m_1043 m_1043 x 0.026206 +m_1043 m_1043 x -0.002241 +m_1043 m_1043 x -0.004563 +m_1043 m_1046 x -0.104471 +m_1043 m_1046 x -0.059102 +m_1043 m_1046 x -0.086887 +m_1043 m_1046 x -0.0566 +m_1043 m_1046 x -0.020795 +m_1044 m_1044 x 0.032542 +m_1044 m_1044 x 0.110404 +m_1044 m_1044 x 0.044183 +m_1044 m_1044 x 0.097114 +m_1044 m_1044 x 0.160409 +m_1044 m_1047 x -0.156181 +m_1044 m_1047 x -0.14282 +m_1044 m_1047 x -0.085566 +m_1044 m_1047 x -0.125108 +m_1044 m_1047 x -0.115352 +m_1045 m_1045 x 0.172385 +m_1045 m_1045 x 0.126612 +m_1045 m_1045 x 0.077574 +m_1045 m_1045 x 0.289203 +m_1045 m_1045 x 0.253339 +m_1045 m_1048 x -0.256196 +m_1045 m_1048 x -0.253315 +m_1045 m_1048 x -0.22607 +m_1045 m_1048 x -0.118963 +m_1045 m_1048 x -0.170421 +m_1046 m_1046 x -0.021949 +m_1046 m_1046 x -0.013185 +m_1046 m_1046 x 0.2579 +m_1046 m_1046 x 0.142666 +m_1046 m_1046 x 0.317434 +m_1046 m_1049 x -0.119188 +m_1046 m_1049 x -0.111455 +m_1046 m_1049 x -0.06934 +m_1046 m_1049 x -0.140823 +m_1046 m_1049 x -0.16487 +m_1047 m_1047 x 0.048617 +m_1047 m_1047 x 0.091316 +m_1047 m_1047 x 0.108092 +m_1047 m_1047 x 0.042686 +m_1047 m_1047 x 0.082616 +m_1047 m_1050 x -0.086422 +m_1047 m_1050 x -0.135674 +m_1047 m_1050 x -0.092624 +m_1047 m_1050 x -0.221991 +m_1047 m_1050 x -0.072428 +m_1048 m_1048 x -0.040296 +m_1048 m_1048 x 0.304093 +m_1048 m_1048 x 0.274446 +m_1048 m_1048 x 0.218834 +m_1048 m_1048 x 0.019644 +m_1048 m_1051 x -0.081076 +m_1048 m_1051 x -0.106185 +m_1048 m_1051 x -0.146137 +m_1048 m_1051 x -0.1589 +m_1048 m_1051 x -0.156646 +m_1049 m_1049 x 0.08706 +m_1049 m_1049 x 0.190712 +m_1049 m_1049 x 0.157489 +m_1049 m_1049 x 0.050289 +m_1049 m_1049 x 0.115878 +m_1049 m_1052 x -0.055599 +m_1049 m_1052 x -0.077193 +m_1049 m_1052 x -0.065377 +m_1049 m_1052 x -0.021629 +m_1049 m_1052 x -0.083342 +m_1050 m_1040 x -0.096163 +m_1050 m_1040 x -0.137793 +m_1050 m_1040 x -0.186286 +m_1050 m_1040 x -0.141722 +m_1050 m_1040 x -0.099895 +m_1050 m_1050 x 0.018712 +m_1050 m_1050 x 0.061794 +m_1050 m_1050 x -0.00523 +m_1050 m_1050 x 0.117835 +m_1050 m_1050 x -0.07796 +m_1051 m_1041 x -0.090685 +m_1051 m_1041 x -0.14119 +m_1051 m_1041 x -0.084481 +m_1051 m_1041 x -0.144805 +m_1051 m_1041 x -0.149656 +m_1051 m_1051 x 0.149061 +m_1051 m_1051 x 0.298765 +m_1051 m_1051 x 0.194495 +m_1051 m_1051 x 0.272661 +m_1051 m_1051 x 0.252346 +m_1052 m_1042 x -0.149167 +m_1052 m_1042 x -0.16615 +m_1052 m_1042 x -0.276333 +m_1052 m_1042 x -0.188244 +m_1052 m_1042 x -0.199263 +m_1052 m_1052 x 0.074832 +m_1052 m_1052 x 0.111728 +m_1052 m_1052 x 0.011147 +m_1052 m_1052 x 0.096093 +m_1052 m_1052 x 0.014352 +f_1014 f_1014 x 0.108577 +f_1014 f_1014 x 0.227893 +f_1014 f_1014 x 0.253652 +f_1014 f_1014 x 0.32725 +f_1014 f_1014 x 0.340216 +f_1014 f_1018 x -0.102353 +f_1014 f_1018 x -0.111658 +f_1014 f_1018 x -0.065165 +f_1014 f_1018 x -0.090465 +f_1014 f_1018 x -0.087901 +f_1015 f_1015 x 0.276852 +f_1015 f_1015 x 0.324612 +f_1015 f_1015 x 0.336296 +f_1015 f_1015 x 0.235154 +f_1015 f_1015 x 0.256454 +f_1015 f_1019 x -0.078625 +f_1015 f_1019 x -0.109084 +f_1015 f_1019 x -0.059179 +f_1015 f_1019 x -0.147283 +f_1015 f_1019 x -0.151253 +f_1016 f_1016 x 0.09251 +f_1016 f_1016 x 0.238722 +f_1016 f_1016 x 0.120821 +f_1016 f_1016 x 0.203909 +f_1016 f_1016 x 0.031465 +f_1016 f_1020 x -0.080126 +f_1016 f_1020 x -0.164751 +f_1016 f_1020 x -0.121187 +f_1016 f_1020 x -0.082511 +f_1016 f_1020 x -0.113241 +f_1017 f_1017 x 0.028233 +f_1017 f_1017 x 0.148459 +f_1017 f_1017 x -0.018476 +f_1017 f_1017 x 0.061587 +f_1017 f_1017 x 0.021536 +f_1017 f_1021 x 0.016132 +f_1017 f_1021 x -0.121139 +f_1017 f_1021 x -0.060869 +f_1017 f_1021 x -0.09941 +f_1017 f_1021 x -0.118627 +f_1018 f_1018 x 0.158122 +f_1018 f_1018 x 0.126481 +f_1018 f_1018 x 0.071357 +f_1018 f_1018 x 0.098801 +f_1018 f_1018 x 0.141165 +f_1018 f_1022 x -0.064997 +f_1018 f_1022 x -0.045456 +f_1018 f_1022 x -0.123946 +f_1018 f_1022 x -0.100114 +f_1018 f_1022 x -0.101694 +f_1019 f_1019 x 0.092109 +f_1019 f_1019 x 0.097601 +f_1019 f_1019 x 0.180552 +f_1019 f_1019 x 0.099773 +f_1019 f_1019 x 0.169073 +f_1019 f_1023 x -0.052974 +f_1019 f_1023 x -0.10636 +f_1019 f_1023 x -0.135503 +f_1019 f_1023 x -0.079938 +f_1019 f_1023 x -0.055776 +f_1020 f_1020 x 0.260382 +f_1020 f_1020 x 0.119577 +f_1020 f_1020 x -0.004131 +f_1020 f_1020 x 0.098814 +f_1020 f_1020 x 0.086 +f_1020 f_1024 x -0.028026 +f_1020 f_1024 x -0.026484 +f_1020 f_1024 x -0.072186 +f_1020 f_1024 x -0.06285 +f_1020 f_1024 x 0.003419 +f_1021 f_1021 x 0.039163 +f_1021 f_1021 x 0.033955 +f_1021 f_1021 x 0.062135 +f_1021 f_1021 x 0.010597 +f_1021 f_1021 x 0.091413 +f_1021 f_1025 x -0.248219 +f_1021 f_1025 x -0.151833 +f_1021 f_1025 x -0.176115 +f_1021 f_1025 x -0.131918 +f_1021 f_1025 x -0.077725 +f_1022 f_1022 x 0.180838 +f_1022 f_1022 x 0.143177 +f_1022 f_1022 x 0.232578 +f_1022 f_1022 x 0.289811 +f_1022 f_1022 x 0.114453 +f_1022 f_1026 x -0.158982 +f_1022 f_1026 x -0.060544 +f_1022 f_1026 x -0.105571 +f_1022 f_1026 x -0.176789 +f_1022 f_1026 x -0.077864 +f_1023 f_1014 x -0.107909 +f_1023 f_1014 x -0.12447 +f_1023 f_1014 x -0.081167 +f_1023 f_1014 x -0.036152 +f_1023 f_1014 x -0.067161 +f_1023 f_1023 x 0.15069 +f_1023 f_1023 x 0.233796 +f_1023 f_1023 x 0.205184 +f_1023 f_1023 x 0.017664 +f_1023 f_1023 x 0.151249 +f_1024 f_1015 x -0.109158 +f_1024 f_1015 x -0.069678 +f_1024 f_1015 x -0.130969 +f_1024 f_1015 x -0.104467 +f_1024 f_1015 x -0.141174 +f_1024 f_1024 x 0.263034 +f_1024 f_1024 x 0.273758 +f_1024 f_1024 x 0.216361 +f_1024 f_1024 x 0.234225 +f_1024 f_1024 x 0.195322 +f_1025 f_1016 x -0.07368 +f_1025 f_1016 x -0.013295 +f_1025 f_1016 x -0.052979 +f_1025 f_1016 x -0.080032 +f_1025 f_1016 x -0.046169 +f_1025 f_1025 x 0.040995 +f_1025 f_1025 x 0.015184 +f_1025 f_1025 x -0.038587 +f_1025 f_1025 x 0.115313 +f_1025 f_1025 x -0.025057 +f_1026 f_1017 x -0.134662 +f_1026 f_1017 x -0.173454 +f_1026 f_1017 x -0.107414 +f_1026 f_1017 x -0.072375 +f_1026 f_1017 x -0.096127 +f_1026 f_1026 x -0.027845 +f_1026 f_1026 x -0.109461 +f_1026 f_1026 x 0.14858 +f_1026 f_1026 x -0.049125 +f_1026 f_1026 x 0.001497 +m_1040 m_1040 x 0.221399 +m_1040 m_1040 x 0.279534 +m_1040 m_1040 x 0.199229 +m_1040 m_1040 x 0.133006 +m_1040 m_1040 x 0.082303 +m_1040 m_1044 x -0.049536 +m_1040 m_1044 x -0.113089 +m_1040 m_1044 x -0.149159 +m_1040 m_1044 x -0.116671 +m_1040 m_1044 x -0.111438 +m_1041 m_1041 x 0.051518 +m_1041 m_1041 x 0.08079 +m_1041 m_1041 x 0.071167 +m_1041 m_1041 x 0.077873 +m_1041 m_1041 x 0.120539 +m_1041 m_1045 x -0.109798 +m_1041 m_1045 x -0.019602 +m_1041 m_1045 x -0.018571 +m_1041 m_1045 x -0.097454 +m_1041 m_1045 x -0.14162 +m_1042 m_1042 x 0.239908 +m_1042 m_1042 x 0.394366 +m_1042 m_1042 x 0.424995 +m_1042 m_1042 x 0.362606 +m_1042 m_1042 x 0.083466 +m_1042 m_1046 x -0.082171 +m_1042 m_1046 x -0.082347 +m_1042 m_1046 x 0.019412 +m_1042 m_1046 x -0.132104 +m_1042 m_1046 x -0.10197 +m_1043 m_1043 x 0.141103 +m_1043 m_1043 x 0.151438 +m_1043 m_1043 x 0.123697 +m_1043 m_1043 x 0.187986 +m_1043 m_1043 x 0.112817 +m_1043 m_1047 x -0.077024 +m_1043 m_1047 x -0.042302 +m_1043 m_1047 x -0.026802 +m_1043 m_1047 x -0.083944 +m_1043 m_1047 x -0.155431 +m_1044 m_1044 x -0.028161 +m_1044 m_1044 x 0.054529 +m_1044 m_1044 x 0.13168 +m_1044 m_1044 x 0.038872 +m_1044 m_1044 x 0.077572 +m_1044 m_1048 x -0.213132 +m_1044 m_1048 x -0.193029 +m_1044 m_1048 x -0.200924 +m_1044 m_1048 x -0.16708 +m_1044 m_1048 x -0.204056 +m_1045 m_1045 x 0.153144 +m_1045 m_1045 x 0.093438 +m_1045 m_1045 x 0.087949 +m_1045 m_1045 x 0.160263 +m_1045 m_1045 x 0.084367 +m_1045 m_1049 x -0.045984 +m_1045 m_1049 x -0.118589 +m_1045 m_1049 x -0.018129 +m_1045 m_1049 x -0.108371 +m_1045 m_1049 x -0.158667 +m_1046 m_1046 x -0.106347 +m_1046 m_1046 x 0.159463 +m_1046 m_1046 x 0.269966 +m_1046 m_1046 x 0.168759 +m_1046 m_1046 x 0.289834 +m_1046 m_1050 x -0.101596 +m_1046 m_1050 x -0.128711 +m_1046 m_1050 x -0.059498 +m_1046 m_1050 x -0.173279 +m_1046 m_1050 x -0.110372 +m_1047 m_1047 x 0.071048 +m_1047 m_1047 x 0.20056 +m_1047 m_1047 x 0.176091 +m_1047 m_1047 x 0.098561 +m_1047 m_1047 x 0.164626 +m_1047 m_1051 x -0.093315 +m_1047 m_1051 x -0.018984 +m_1047 m_1051 x -0.103095 +m_1047 m_1051 x -0.077934 +m_1047 m_1051 x -0.118351 +m_1048 m_1048 x 0.377338 +m_1048 m_1048 x 0.424671 +m_1048 m_1048 x 0.297769 +m_1048 m_1048 x -0.005302 +m_1048 m_1048 x 0.196666 +m_1048 m_1052 x -0.069208 +m_1048 m_1052 x -0.177879 +m_1048 m_1052 x -0.10231 +m_1048 m_1052 x -0.122667 +m_1048 m_1052 x -0.068862 +m_1049 m_1040 x -0.153227 +m_1049 m_1040 x -0.184595 +m_1049 m_1040 x -0.136615 +m_1049 m_1040 x -0.077627 +m_1049 m_1040 x -0.106458 +m_1049 m_1049 x 0.111003 +m_1049 m_1049 x 0.101531 +m_1049 m_1049 x 0.123256 +m_1049 m_1049 x 0.12464 +m_1049 m_1049 x 0.051604 +m_1050 m_1041 x -0.054181 +m_1050 m_1041 x -0.140659 +m_1050 m_1041 x -0.129502 +m_1050 m_1041 x -0.108929 +m_1050 m_1041 x -0.032078 +m_1050 m_1050 x 0.126906 +m_1050 m_1050 x 0.13685 +m_1050 m_1050 x 0.033093 +m_1050 m_1050 x 0.047939 +m_1050 m_1050 x -0.013868 +m_1051 m_1042 x -0.153977 +m_1051 m_1042 x -0.113284 +m_1051 m_1042 x -0.23003 +m_1051 m_1042 x -0.186212 +m_1051 m_1042 x -0.145767 +m_1051 m_1051 x 0.235478 +m_1051 m_1051 x 0.207846 +m_1051 m_1051 x 0.278796 +m_1051 m_1051 x 0.142962 +m_1051 m_1051 x 0.180351 +m_1052 m_1043 x -0.178691 +m_1052 m_1043 x -0.197601 +m_1052 m_1043 x -0.129918 +m_1052 m_1043 x -0.167795 +m_1052 m_1043 x -0.175029 +m_1052 m_1052 x 0.082763 +m_1052 m_1052 x 0.112163 +m_1052 m_1052 x 0.188003 +m_1052 m_1052 x 0.044418 +m_1052 m_1052 x 0.127454 +f_1014 f_1015 x 0.014841 +f_1014 f_1015 x -0.026769 +f_1014 f_1015 x -0.080662 +f_1014 f_1015 x -0.085209 +f_1014 f_1015 x -0.072679 +f_1015 f_1016 x -0.164857 +f_1015 f_1016 x -0.178725 +f_1015 f_1016 x -0.128464 +f_1015 f_1016 x -0.214679 +f_1015 f_1016 x -0.134944 +f_1016 f_1017 x -0.014597 +f_1016 f_1017 x -0.071501 +f_1016 f_1017 x -0.128072 +f_1016 f_1017 x -0.123337 +f_1016 f_1017 x -0.116541 +f_1017 f_1018 x -0.141496 +f_1017 f_1018 x -0.196624 +f_1017 f_1018 x -0.173068 +f_1017 f_1018 x -0.230658 +f_1017 f_1018 x -0.205358 +f_1018 f_1019 x -0.048368 +f_1018 f_1019 x -0.043071 +f_1018 f_1019 x -0.049429 +f_1018 f_1019 x -0.014632 +f_1018 f_1019 x -0.093057 +f_1019 f_1020 x -0.124173 +f_1019 f_1020 x -0.122335 +f_1019 f_1020 x -0.078392 +f_1019 f_1020 x -0.211568 +f_1019 f_1020 x -0.221264 +f_1020 f_1021 x -0.190812 +f_1020 f_1021 x -0.130903 +f_1020 f_1021 x -0.148297 +f_1020 f_1021 x -0.218195 +f_1020 f_1021 x -0.130123 +f_1021 f_1022 x -0.020938 +f_1021 f_1022 x 0.032565 +f_1021 f_1022 x 0.029753 +f_1021 f_1022 x 0.008387 +f_1021 f_1022 x -0.029518 +f_1022 f_1023 x -0.065429 +f_1022 f_1023 x -0.0499 +f_1022 f_1023 x -0.092752 +f_1022 f_1023 x -0.115253 +f_1022 f_1023 x -0.043749 +f_1023 f_1024 x -0.160373 +f_1023 f_1024 x -0.073335 +f_1023 f_1024 x -0.05861 +f_1023 f_1024 x -0.094012 +f_1023 f_1024 x -0.056688 +f_1024 f_1025 x -0.328486 +f_1024 f_1025 x -0.308301 +f_1024 f_1025 x -0.220186 +f_1024 f_1025 x -0.365362 +f_1024 f_1025 x -0.178491 +f_1025 f_1026 x -0.098447 +f_1025 f_1026 x -0.079008 +f_1025 f_1026 x -0.120396 +f_1025 f_1026 x -0.092791 +f_1025 f_1026 x -0.052482 +f_1026 f_1014 x -0.066869 +f_1026 f_1014 x -0.139432 +f_1026 f_1014 x -0.037634 +f_1026 f_1014 x -0.20375 +f_1026 f_1014 x -0.132627 +m_1040 m_1041 x -0.045661 +m_1040 m_1041 x -0.025406 +m_1040 m_1041 x -0.075282 +m_1040 m_1041 x -0.05577 +m_1040 m_1041 x -0.070087 +m_1041 m_1042 x -0.205976 +m_1041 m_1042 x -0.130663 +m_1041 m_1042 x -0.081094 +m_1041 m_1042 x -0.097618 +m_1041 m_1042 x -0.021077 +m_1042 m_1043 x -0.037937 +m_1042 m_1043 x -0.002371 +m_1042 m_1043 x 0.012176 +m_1042 m_1043 x -0.093591 +m_1042 m_1043 x -0.038423 +m_1043 m_1044 x -0.101432 +m_1043 m_1044 x -0.039491 +m_1043 m_1044 x -0.11965 +m_1043 m_1044 x -0.109702 +m_1043 m_1044 x -0.156936 +m_1044 m_1045 x -0.085479 +m_1044 m_1045 x -0.13362 +m_1044 m_1045 x -0.12149 +m_1044 m_1045 x -0.075713 +m_1044 m_1045 x -0.08801 +m_1045 m_1046 x -0.106102 +m_1045 m_1046 x -0.141614 +m_1045 m_1046 x -0.150365 +m_1045 m_1046 x -0.123084 +m_1045 m_1046 x -0.201897 +m_1046 m_1047 x -0.125069 +m_1046 m_1047 x -0.168533 +m_1046 m_1047 x -0.112757 +m_1046 m_1047 x -0.1736 +m_1046 m_1047 x -0.172724 +m_1047 m_1048 x -0.166386 +m_1047 m_1048 x -0.170671 +m_1047 m_1048 x -0.058329 +m_1047 m_1048 x -0.109204 +m_1047 m_1048 x -0.122232 +m_1048 m_1049 x -0.204613 +m_1048 m_1049 x -0.219919 +m_1048 m_1049 x -0.146424 +m_1048 m_1049 x -0.16871 +m_1048 m_1049 x -0.142253 +m_1049 m_1050 x -0.051034 +m_1049 m_1050 x -0.103298 +m_1049 m_1050 x -0.035702 +m_1049 m_1050 x -0.100288 +m_1049 m_1050 x -0.00913 +m_1050 m_1051 x -0.073954 +m_1050 m_1051 x -0.099813 +m_1050 m_1051 x -0.044652 +m_1050 m_1051 x -0.043802 +m_1050 m_1051 x -0.139938 +m_1051 m_1052 x -0.109771 +m_1051 m_1052 x -0.121056 +m_1051 m_1052 x -0.102811 +m_1051 m_1052 x -0.097827 +m_1051 m_1052 x -0.106235 +m_1052 m_1040 x -0.129523 +m_1052 m_1040 x -0.167863 +m_1052 m_1040 x -0.179332 +m_1052 m_1040 x -0.169263 +m_1052 m_1040 x -0.188729 diff --git a/bob/bio/base/test/data/test-5col.txt b/bob/bio/base/test/data/test-5col.txt new file mode 100644 index 0000000000000000000000000000000000000000..430047a567c7fbd0ab3ec68ab5888732324b9b8c --- /dev/null +++ b/bob/bio/base/test/data/test-5col.txt @@ -0,0 +1,910 @@ +f_1014 x f_1014 x 0.175237 +f_1014 x f_1014 x 0.304839 +f_1014 x f_1014 x 0.256713 +f_1014 x f_1014 x 0.37347 +f_1014 x f_1014 x 0.4842 +f_1014 x f_1016 x -0.132795 +f_1014 x f_1016 x -0.090261 +f_1014 x f_1016 x -0.116631 +f_1014 x f_1016 x -0.067892 +f_1014 x f_1016 x -0.101526 +f_1015 x f_1015 x 0.054443 +f_1015 x f_1015 x 0.258395 +f_1015 x f_1015 x 0.210023 +f_1015 x f_1015 x 0.19985 +f_1015 x f_1015 x 0.25951 +f_1015 x f_1017 x -0.106891 +f_1015 x f_1017 x -0.167279 +f_1015 x f_1017 x -0.158916 +f_1015 x f_1017 x -0.177507 +f_1015 x f_1017 x -0.125337 +f_1016 x f_1016 x 0.21881 +f_1016 x f_1016 x 0.126132 +f_1016 x f_1016 x 0.37815 +f_1016 x f_1016 x 0.222685 +f_1016 x f_1016 x 0.307243 +f_1016 x f_1018 x -0.049229 +f_1016 x f_1018 x -0.1148 +f_1016 x f_1018 x -0.111412 +f_1016 x f_1018 x -0.126608 +f_1016 x f_1018 x -0.084573 +f_1017 x f_1017 x -0.017341 +f_1017 x f_1017 x 0.026926 +f_1017 x f_1017 x 0.11222 +f_1017 x f_1017 x 0.037274 +f_1017 x f_1017 x 0.028239 +f_1017 x f_1019 x -0.068405 +f_1017 x f_1019 x -0.086171 +f_1017 x f_1019 x -0.135923 +f_1017 x f_1019 x -0.081824 +f_1017 x f_1019 x -0.178919 +f_1018 x f_1018 x 0.237832 +f_1018 x f_1018 x 0.21383 +f_1018 x f_1018 x 0.197277 +f_1018 x f_1018 x 0.004259 +f_1018 x f_1018 x 0.244453 +f_1018 x f_1020 x -0.147546 +f_1018 x f_1020 x -0.043125 +f_1018 x f_1020 x -0.173616 +f_1018 x f_1020 x -0.143199 +f_1018 x f_1020 x -0.105378 +f_1019 x f_1019 x 0.042442 +f_1019 x f_1019 x 0.115268 +f_1019 x f_1019 x 0.170583 +f_1019 x f_1019 x 0.206193 +f_1019 x f_1019 x 0.096731 +f_1019 x f_1021 x -0.15031 +f_1019 x f_1021 x -0.132395 +f_1019 x f_1021 x -0.169058 +f_1019 x f_1021 x -0.156056 +f_1019 x f_1021 x -0.155288 +f_1020 x f_1020 x 0.03643 +f_1020 x f_1020 x 0.117264 +f_1020 x f_1020 x 0.285537 +f_1020 x f_1020 x 0.359734 +f_1020 x f_1020 x 0.382881 +f_1020 x f_1022 x 0.015456 +f_1020 x f_1022 x -0.098693 +f_1020 x f_1022 x 0.001723 +f_1020 x f_1022 x -0.069837 +f_1020 x f_1022 x 0.010294 +f_1021 x f_1021 x 0.101494 +f_1021 x f_1021 x 0.182224 +f_1021 x f_1021 x 0.012012 +f_1021 x f_1021 x 0.035786 +f_1021 x f_1021 x 0.178588 +f_1021 x f_1023 x -0.012187 +f_1021 x f_1023 x -0.150579 +f_1021 x f_1023 x -0.076234 +f_1021 x f_1023 x -0.078789 +f_1021 x f_1023 x -0.047604 +f_1022 x f_1022 x 0.286642 +f_1022 x f_1022 x -0.043404 +f_1022 x f_1022 x 0.141256 +f_1022 x f_1022 x 0.203942 +f_1022 x f_1022 x 0.116838 +f_1022 x f_1024 x -0.064643 +f_1022 x f_1024 x -0.095398 +f_1022 x f_1024 x -0.093624 +f_1022 x f_1024 x -0.086501 +f_1022 x f_1024 x -0.114908 +f_1023 x f_1023 x 0.164015 +f_1023 x f_1023 x 0.333836 +f_1023 x f_1023 x 0.227632 +f_1023 x f_1023 x 0.221866 +f_1023 x f_1023 x 0.256993 +f_1023 x f_1025 x -0.212049 +f_1023 x f_1025 x -0.214593 +f_1023 x f_1025 x -0.178651 +f_1023 x f_1025 x -0.116316 +f_1023 x f_1025 x -0.16932 +f_1024 x f_1024 x 0.315482 +f_1024 x f_1024 x 0.186705 +f_1024 x f_1024 x 0.174492 +f_1024 x f_1024 x 0.182486 +f_1024 x f_1024 x 0.197654 +f_1024 x f_1026 x -0.104582 +f_1024 x f_1026 x -0.14075 +f_1024 x f_1026 x -0.091511 +f_1024 x f_1026 x -0.151864 +f_1024 x f_1026 x -0.136013 +f_1025 x f_1014 x -0.119154 +f_1025 x f_1014 x -0.150153 +f_1025 x f_1014 x -0.087496 +f_1025 x f_1014 x -0.132967 +f_1025 x f_1014 x -0.074032 +f_1025 x f_1025 x -0.098941 +f_1025 x f_1025 x -0.056289 +f_1025 x f_1025 x -0.185361 +f_1025 x f_1025 x 0.017452 +f_1025 x f_1025 x 0.17846 +f_1026 x f_1015 x -0.145975 +f_1026 x f_1015 x -0.145888 +f_1026 x f_1015 x -0.177149 +f_1026 x f_1015 x -0.166486 +f_1026 x f_1015 x -0.202473 +f_1026 x f_1026 x 0.307376 +f_1026 x f_1026 x 0.154666 +f_1026 x f_1026 x 0.131216 +f_1026 x f_1026 x 0.131029 +f_1026 x f_1026 x 0.067151 +m_1040 x m_1040 x 0.135275 +m_1040 x m_1040 x 0.249472 +m_1040 x m_1040 x 0.185975 +m_1040 x m_1040 x 0.141155 +m_1040 x m_1040 x 0.361171 +m_1040 x m_1042 x -0.152226 +m_1040 x m_1042 x -0.15413 +m_1040 x m_1042 x -0.022675 +m_1040 x m_1042 x -0.03507 +m_1040 x m_1042 x -0.108974 +m_1041 x m_1041 x 0.256448 +m_1041 x m_1041 x 0.244108 +m_1041 x m_1041 x 0.28142 +m_1041 x m_1041 x 0.131366 +m_1041 x m_1041 x 0.238593 +m_1041 x m_1043 x -0.109183 +m_1041 x m_1043 x -0.078833 +m_1041 x m_1043 x -0.072502 +m_1041 x m_1043 x -0.066688 +m_1041 x m_1043 x -0.205101 +m_1042 x m_1042 x 0.018683 +m_1042 x m_1042 x 0.250633 +m_1042 x m_1042 x 0.311741 +m_1042 x m_1042 x 0.169665 +m_1042 x m_1042 x 0.180004 +m_1042 x m_1044 x -0.098772 +m_1042 x m_1044 x -0.176161 +m_1042 x m_1044 x -0.115254 +m_1042 x m_1044 x -0.128812 +m_1042 x m_1044 x -0.109547 +m_1043 x m_1043 x 0.129869 +m_1043 x m_1043 x 0.383131 +m_1043 x m_1043 x 0.294704 +m_1043 x m_1043 x 0.374444 +m_1043 x m_1043 x 0.326108 +m_1043 x m_1045 x -0.170887 +m_1043 x m_1045 x -0.139108 +m_1043 x m_1045 x -0.174187 +m_1043 x m_1045 x -0.176998 +m_1043 x m_1045 x -0.159841 +m_1044 x m_1044 x 0.120106 +m_1044 x m_1044 x 0.008721 +m_1044 x m_1044 x 0.156735 +m_1044 x m_1044 x 0.10402 +m_1044 x m_1044 x 0.103297 +m_1044 x m_1046 x -0.06416 +m_1044 x m_1046 x -0.111405 +m_1044 x m_1046 x -0.128987 +m_1044 x m_1046 x -0.115382 +m_1044 x m_1046 x -0.179751 +m_1045 x m_1045 x 0.226013 +m_1045 x m_1045 x 0.30898 +m_1045 x m_1045 x 0.244402 +m_1045 x m_1045 x 0.185819 +m_1045 x m_1045 x 0.352065 +m_1045 x m_1047 x -0.165835 +m_1045 x m_1047 x -0.198608 +m_1045 x m_1047 x -0.147002 +m_1045 x m_1047 x -0.149473 +m_1045 x m_1047 x -0.223582 +m_1046 x m_1046 x 0.327642 +m_1046 x m_1046 x 0.163479 +m_1046 x m_1046 x 0.194457 +m_1046 x m_1046 x 0.248568 +m_1046 x m_1046 x 0.276627 +m_1046 x m_1048 x -0.23229 +m_1046 x m_1048 x -0.2629 +m_1046 x m_1048 x -0.231205 +m_1046 x m_1048 x -0.189854 +m_1046 x m_1048 x -0.24022 +m_1047 x m_1047 x 0.107771 +m_1047 x m_1047 x 0.287596 +m_1047 x m_1047 x 0.340219 +m_1047 x m_1047 x 0.110695 +m_1047 x m_1047 x 0.273247 +m_1047 x m_1049 x -0.113823 +m_1047 x m_1049 x -0.206661 +m_1047 x m_1049 x -0.09003 +m_1047 x m_1049 x -0.172021 +m_1047 x m_1049 x -0.18018 +m_1048 x m_1048 x 0.231718 +m_1048 x m_1048 x 0.032567 +m_1048 x m_1048 x 0.37068 +m_1048 x m_1048 x 0.531794 +m_1048 x m_1048 x 0.251853 +m_1048 x m_1050 x -0.039807 +m_1048 x m_1050 x -0.158791 +m_1048 x m_1050 x -0.123597 +m_1048 x m_1050 x -0.195967 +m_1048 x m_1050 x -0.10318 +m_1049 x m_1049 x 0.137166 +m_1049 x m_1049 x 0.07881 +m_1049 x m_1049 x 0.122634 +m_1049 x m_1049 x 0.067998 +m_1049 x m_1049 x 0.032458 +m_1049 x m_1051 x -0.045168 +m_1049 x m_1051 x -0.07624 +m_1049 x m_1051 x -0.010425 +m_1049 x m_1051 x -0.007416 +m_1049 x m_1051 x -0.104273 +m_1050 x m_1050 x 0.198104 +m_1050 x m_1050 x 0.238023 +m_1050 x m_1050 x 0.325879 +m_1050 x m_1050 x 0.212732 +m_1050 x m_1050 x 0.07356 +m_1050 x m_1052 x -0.136036 +m_1050 x m_1052 x -0.04766 +m_1050 x m_1052 x -0.15562 +m_1050 x m_1052 x -0.159182 +m_1050 x m_1052 x -0.166221 +m_1051 x m_1040 x -0.045368 +m_1051 x m_1040 x -0.094739 +m_1051 x m_1040 x -0.073475 +m_1051 x m_1040 x -0.166177 +m_1051 x m_1040 x -0.174827 +m_1051 x m_1051 x 0.457431 +m_1051 x m_1051 x 0.155697 +m_1051 x m_1051 x 0.479951 +m_1051 x m_1051 x 0.281574 +m_1051 x m_1051 x 0.206361 +m_1052 x m_1041 x -0.193203 +m_1052 x m_1041 x -0.083981 +m_1052 x m_1041 x -0.100523 +m_1052 x m_1041 x -0.13021 +m_1052 x m_1041 x -0.174762 +m_1052 x m_1052 x 0.092376 +m_1052 x m_1052 x 0.095863 +m_1052 x m_1052 x 0.070707 +m_1052 x m_1052 x 0.120926 +m_1052 x m_1052 x 0.053403 +f_1014 x f_1014 x 0.437731 +f_1014 x f_1014 x 0.318402 +f_1014 x f_1014 x 0.428893 +f_1014 x f_1014 x 0.453113 +f_1014 x f_1014 x 0.495515 +f_1014 x f_1017 x -0.11742 +f_1014 x f_1017 x -0.070269 +f_1014 x f_1017 x -0.106312 +f_1014 x f_1017 x -0.144875 +f_1014 x f_1017 x -0.094553 +f_1015 x f_1015 x 0.22944 +f_1015 x f_1015 x 0.143853 +f_1015 x f_1015 x 0.345441 +f_1015 x f_1015 x 0.292318 +f_1015 x f_1015 x 0.489542 +f_1015 x f_1018 x -0.167798 +f_1015 x f_1018 x -0.079764 +f_1015 x f_1018 x -0.097843 +f_1015 x f_1018 x -0.155892 +f_1015 x f_1018 x -0.132385 +f_1016 x f_1016 x 0.160622 +f_1016 x f_1016 x 0.171162 +f_1016 x f_1016 x 0.157513 +f_1016 x f_1016 x 0.135925 +f_1016 x f_1016 x 0.06149 +f_1016 x f_1019 x -0.050159 +f_1016 x f_1019 x -0.057178 +f_1016 x f_1019 x -0.074997 +f_1016 x f_1019 x -0.051324 +f_1016 x f_1019 x -0.048703 +f_1017 x f_1017 x 0.209104 +f_1017 x f_1017 x 0.175552 +f_1017 x f_1017 x 0.137198 +f_1017 x f_1017 x 0.171513 +f_1017 x f_1017 x 0.130996 +f_1017 x f_1020 x -0.243561 +f_1017 x f_1020 x -0.115798 +f_1017 x f_1020 x -0.034842 +f_1017 x f_1020 x -0.131362 +f_1017 x f_1020 x -0.159915 +f_1018 x f_1018 x -0.005463 +f_1018 x f_1018 x 0.206381 +f_1018 x f_1018 x 0.146986 +f_1018 x f_1018 x 0.069634 +f_1018 x f_1018 x 0.037562 +f_1018 x f_1021 x -0.147572 +f_1018 x f_1021 x -0.098223 +f_1018 x f_1021 x -0.139565 +f_1018 x f_1021 x -0.110759 +f_1018 x f_1021 x -0.147047 +f_1019 x f_1019 x 0.249895 +f_1019 x f_1019 x 0.278538 +f_1019 x f_1019 x 0.259574 +f_1019 x f_1019 x 0.17637 +f_1019 x f_1019 x 0.157258 +f_1019 x f_1022 x -0.118328 +f_1019 x f_1022 x -0.041292 +f_1019 x f_1022 x -0.052633 +f_1019 x f_1022 x -0.080992 +f_1019 x f_1022 x -0.127107 +f_1020 x f_1020 x 0.218971 +f_1020 x f_1020 x 0.04365 +f_1020 x f_1020 x 0.088146 +f_1020 x f_1020 x 0.160735 +f_1020 x f_1020 x 0.171037 +f_1020 x f_1023 x -0.143461 +f_1020 x f_1023 x -0.125433 +f_1020 x f_1023 x -0.129891 +f_1020 x f_1023 x -0.187145 +f_1020 x f_1023 x -0.177769 +f_1021 x f_1021 x -0.000116 +f_1021 x f_1021 x 0.01191 +f_1021 x f_1021 x -0.076906 +f_1021 x f_1021 x -0.115962 +f_1021 x f_1021 x -0.065717 +f_1021 x f_1024 x -0.219317 +f_1021 x f_1024 x -0.20047 +f_1021 x f_1024 x -0.219448 +f_1021 x f_1024 x -0.181918 +f_1021 x f_1024 x -0.221209 +f_1022 x f_1022 x 0.092949 +f_1022 x f_1022 x 0.13708 +f_1022 x f_1022 x 0.007386 +f_1022 x f_1022 x 0.04151 +f_1022 x f_1022 x 0.076811 +f_1022 x f_1025 x -0.148761 +f_1022 x f_1025 x -0.186116 +f_1022 x f_1025 x -0.149164 +f_1022 x f_1025 x -0.171441 +f_1022 x f_1025 x -0.2179 +f_1023 x f_1023 x 0.155696 +f_1023 x f_1023 x 0.065824 +f_1023 x f_1023 x 0.091544 +f_1023 x f_1023 x 0.109188 +f_1023 x f_1023 x 0.132669 +f_1023 x f_1026 x -0.107141 +f_1023 x f_1026 x -0.112328 +f_1023 x f_1026 x -0.117225 +f_1023 x f_1026 x -0.054713 +f_1023 x f_1026 x -0.045185 +f_1024 x f_1014 x -0.029009 +f_1024 x f_1014 x -0.142735 +f_1024 x f_1014 x -0.10747 +f_1024 x f_1014 x -0.046912 +f_1024 x f_1014 x -0.078291 +f_1024 x f_1024 x 0.155625 +f_1024 x f_1024 x 0.218861 +f_1024 x f_1024 x 0.24453 +f_1024 x f_1024 x 0.164316 +f_1024 x f_1024 x 0.037576 +f_1025 x f_1015 x -0.120623 +f_1025 x f_1015 x -0.150187 +f_1025 x f_1015 x -0.15106 +f_1025 x f_1015 x -0.042806 +f_1025 x f_1015 x -0.120825 +f_1025 x f_1025 x 0.187759 +f_1025 x f_1025 x 0.014105 +f_1025 x f_1025 x 0.01868 +f_1025 x f_1025 x 0.000269 +f_1025 x f_1025 x 0.129064 +f_1026 x f_1016 x -0.090137 +f_1026 x f_1016 x -0.191546 +f_1026 x f_1016 x -0.202833 +f_1026 x f_1016 x -0.06334 +f_1026 x f_1016 x -0.180062 +f_1026 x f_1026 x 0.112111 +f_1026 x f_1026 x 0.265684 +f_1026 x f_1026 x 0.164375 +f_1026 x f_1026 x 0.167411 +f_1026 x f_1026 x 0.127449 +m_1040 x m_1040 x 0.209957 +m_1040 x m_1040 x 0.271467 +m_1040 x m_1040 x 0.4301 +m_1040 x m_1040 x 0.33632 +m_1040 x m_1040 x 0.387182 +m_1040 x m_1043 x -0.089345 +m_1040 x m_1043 x -0.060908 +m_1040 x m_1043 x -0.003329 +m_1040 x m_1043 x -0.050925 +m_1040 x m_1043 x -0.085675 +m_1041 x m_1041 x 0.182627 +m_1041 x m_1041 x 0.200762 +m_1041 x m_1041 x 0.117049 +m_1041 x m_1041 x 0.276846 +m_1041 x m_1041 x 0.099233 +m_1041 x m_1044 x -0.086125 +m_1041 x m_1044 x -0.157261 +m_1041 x m_1044 x -0.133127 +m_1041 x m_1044 x -0.054866 +m_1041 x m_1044 x -0.076243 +m_1042 x m_1042 x 0.07247 +m_1042 x m_1042 x 0.247412 +m_1042 x m_1042 x 0.15837 +m_1042 x m_1042 x 0.178847 +m_1042 x m_1042 x 0.24374 +m_1042 x m_1045 x -0.140707 +m_1042 x m_1045 x -0.079508 +m_1042 x m_1045 x -0.143072 +m_1042 x m_1045 x -0.150436 +m_1042 x m_1045 x -0.106972 +m_1043 x m_1043 x 0.173801 +m_1043 x m_1043 x 0.218501 +m_1043 x m_1043 x 0.026206 +m_1043 x m_1043 x -0.002241 +m_1043 x m_1043 x -0.004563 +m_1043 x m_1046 x -0.104471 +m_1043 x m_1046 x -0.059102 +m_1043 x m_1046 x -0.086887 +m_1043 x m_1046 x -0.0566 +m_1043 x m_1046 x -0.020795 +m_1044 x m_1044 x 0.032542 +m_1044 x m_1044 x 0.110404 +m_1044 x m_1044 x 0.044183 +m_1044 x m_1044 x 0.097114 +m_1044 x m_1044 x 0.160409 +m_1044 x m_1047 x -0.156181 +m_1044 x m_1047 x -0.14282 +m_1044 x m_1047 x -0.085566 +m_1044 x m_1047 x -0.125108 +m_1044 x m_1047 x -0.115352 +m_1045 x m_1045 x 0.172385 +m_1045 x m_1045 x 0.126612 +m_1045 x m_1045 x 0.077574 +m_1045 x m_1045 x 0.289203 +m_1045 x m_1045 x 0.253339 +m_1045 x m_1048 x -0.256196 +m_1045 x m_1048 x -0.253315 +m_1045 x m_1048 x -0.22607 +m_1045 x m_1048 x -0.118963 +m_1045 x m_1048 x -0.170421 +m_1046 x m_1046 x -0.021949 +m_1046 x m_1046 x -0.013185 +m_1046 x m_1046 x 0.2579 +m_1046 x m_1046 x 0.142666 +m_1046 x m_1046 x 0.317434 +m_1046 x m_1049 x -0.119188 +m_1046 x m_1049 x -0.111455 +m_1046 x m_1049 x -0.06934 +m_1046 x m_1049 x -0.140823 +m_1046 x m_1049 x -0.16487 +m_1047 x m_1047 x 0.048617 +m_1047 x m_1047 x 0.091316 +m_1047 x m_1047 x 0.108092 +m_1047 x m_1047 x 0.042686 +m_1047 x m_1047 x 0.082616 +m_1047 x m_1050 x -0.086422 +m_1047 x m_1050 x -0.135674 +m_1047 x m_1050 x -0.092624 +m_1047 x m_1050 x -0.221991 +m_1047 x m_1050 x -0.072428 +m_1048 x m_1048 x -0.040296 +m_1048 x m_1048 x 0.304093 +m_1048 x m_1048 x 0.274446 +m_1048 x m_1048 x 0.218834 +m_1048 x m_1048 x 0.019644 +m_1048 x m_1051 x -0.081076 +m_1048 x m_1051 x -0.106185 +m_1048 x m_1051 x -0.146137 +m_1048 x m_1051 x -0.1589 +m_1048 x m_1051 x -0.156646 +m_1049 x m_1049 x 0.08706 +m_1049 x m_1049 x 0.190712 +m_1049 x m_1049 x 0.157489 +m_1049 x m_1049 x 0.050289 +m_1049 x m_1049 x 0.115878 +m_1049 x m_1052 x -0.055599 +m_1049 x m_1052 x -0.077193 +m_1049 x m_1052 x -0.065377 +m_1049 x m_1052 x -0.021629 +m_1049 x m_1052 x -0.083342 +m_1050 x m_1040 x -0.096163 +m_1050 x m_1040 x -0.137793 +m_1050 x m_1040 x -0.186286 +m_1050 x m_1040 x -0.141722 +m_1050 x m_1040 x -0.099895 +m_1050 x m_1050 x 0.018712 +m_1050 x m_1050 x 0.061794 +m_1050 x m_1050 x -0.00523 +m_1050 x m_1050 x 0.117835 +m_1050 x m_1050 x -0.07796 +m_1051 x m_1041 x -0.090685 +m_1051 x m_1041 x -0.14119 +m_1051 x m_1041 x -0.084481 +m_1051 x m_1041 x -0.144805 +m_1051 x m_1041 x -0.149656 +m_1051 x m_1051 x 0.149061 +m_1051 x m_1051 x 0.298765 +m_1051 x m_1051 x 0.194495 +m_1051 x m_1051 x 0.272661 +m_1051 x m_1051 x 0.252346 +m_1052 x m_1042 x -0.149167 +m_1052 x m_1042 x -0.16615 +m_1052 x m_1042 x -0.276333 +m_1052 x m_1042 x -0.188244 +m_1052 x m_1042 x -0.199263 +m_1052 x m_1052 x 0.074832 +m_1052 x m_1052 x 0.111728 +m_1052 x m_1052 x 0.011147 +m_1052 x m_1052 x 0.096093 +m_1052 x m_1052 x 0.014352 +f_1014 x f_1014 x 0.108577 +f_1014 x f_1014 x 0.227893 +f_1014 x f_1014 x 0.253652 +f_1014 x f_1014 x 0.32725 +f_1014 x f_1014 x 0.340216 +f_1014 x f_1018 x -0.102353 +f_1014 x f_1018 x -0.111658 +f_1014 x f_1018 x -0.065165 +f_1014 x f_1018 x -0.090465 +f_1014 x f_1018 x -0.087901 +f_1015 x f_1015 x 0.276852 +f_1015 x f_1015 x 0.324612 +f_1015 x f_1015 x 0.336296 +f_1015 x f_1015 x 0.235154 +f_1015 x f_1015 x 0.256454 +f_1015 x f_1019 x -0.078625 +f_1015 x f_1019 x -0.109084 +f_1015 x f_1019 x -0.059179 +f_1015 x f_1019 x -0.147283 +f_1015 x f_1019 x -0.151253 +f_1016 x f_1016 x 0.09251 +f_1016 x f_1016 x 0.238722 +f_1016 x f_1016 x 0.120821 +f_1016 x f_1016 x 0.203909 +f_1016 x f_1016 x 0.031465 +f_1016 x f_1020 x -0.080126 +f_1016 x f_1020 x -0.164751 +f_1016 x f_1020 x -0.121187 +f_1016 x f_1020 x -0.082511 +f_1016 x f_1020 x -0.113241 +f_1017 x f_1017 x 0.028233 +f_1017 x f_1017 x 0.148459 +f_1017 x f_1017 x -0.018476 +f_1017 x f_1017 x 0.061587 +f_1017 x f_1017 x 0.021536 +f_1017 x f_1021 x 0.016132 +f_1017 x f_1021 x -0.121139 +f_1017 x f_1021 x -0.060869 +f_1017 x f_1021 x -0.09941 +f_1017 x f_1021 x -0.118627 +f_1018 x f_1018 x 0.158122 +f_1018 x f_1018 x 0.126481 +f_1018 x f_1018 x 0.071357 +f_1018 x f_1018 x 0.098801 +f_1018 x f_1018 x 0.141165 +f_1018 x f_1022 x -0.064997 +f_1018 x f_1022 x -0.045456 +f_1018 x f_1022 x -0.123946 +f_1018 x f_1022 x -0.100114 +f_1018 x f_1022 x -0.101694 +f_1019 x f_1019 x 0.092109 +f_1019 x f_1019 x 0.097601 +f_1019 x f_1019 x 0.180552 +f_1019 x f_1019 x 0.099773 +f_1019 x f_1019 x 0.169073 +f_1019 x f_1023 x -0.052974 +f_1019 x f_1023 x -0.10636 +f_1019 x f_1023 x -0.135503 +f_1019 x f_1023 x -0.079938 +f_1019 x f_1023 x -0.055776 +f_1020 x f_1020 x 0.260382 +f_1020 x f_1020 x 0.119577 +f_1020 x f_1020 x -0.004131 +f_1020 x f_1020 x 0.098814 +f_1020 x f_1020 x 0.086 +f_1020 x f_1024 x -0.028026 +f_1020 x f_1024 x -0.026484 +f_1020 x f_1024 x -0.072186 +f_1020 x f_1024 x -0.06285 +f_1020 x f_1024 x 0.003419 +f_1021 x f_1021 x 0.039163 +f_1021 x f_1021 x 0.033955 +f_1021 x f_1021 x 0.062135 +f_1021 x f_1021 x 0.010597 +f_1021 x f_1021 x 0.091413 +f_1021 x f_1025 x -0.248219 +f_1021 x f_1025 x -0.151833 +f_1021 x f_1025 x -0.176115 +f_1021 x f_1025 x -0.131918 +f_1021 x f_1025 x -0.077725 +f_1022 x f_1022 x 0.180838 +f_1022 x f_1022 x 0.143177 +f_1022 x f_1022 x 0.232578 +f_1022 x f_1022 x 0.289811 +f_1022 x f_1022 x 0.114453 +f_1022 x f_1026 x -0.158982 +f_1022 x f_1026 x -0.060544 +f_1022 x f_1026 x -0.105571 +f_1022 x f_1026 x -0.176789 +f_1022 x f_1026 x -0.077864 +f_1023 x f_1014 x -0.107909 +f_1023 x f_1014 x -0.12447 +f_1023 x f_1014 x -0.081167 +f_1023 x f_1014 x -0.036152 +f_1023 x f_1014 x -0.067161 +f_1023 x f_1023 x 0.15069 +f_1023 x f_1023 x 0.233796 +f_1023 x f_1023 x 0.205184 +f_1023 x f_1023 x 0.017664 +f_1023 x f_1023 x 0.151249 +f_1024 x f_1015 x -0.109158 +f_1024 x f_1015 x -0.069678 +f_1024 x f_1015 x -0.130969 +f_1024 x f_1015 x -0.104467 +f_1024 x f_1015 x -0.141174 +f_1024 x f_1024 x 0.263034 +f_1024 x f_1024 x 0.273758 +f_1024 x f_1024 x 0.216361 +f_1024 x f_1024 x 0.234225 +f_1024 x f_1024 x 0.195322 +f_1025 x f_1016 x -0.07368 +f_1025 x f_1016 x -0.013295 +f_1025 x f_1016 x -0.052979 +f_1025 x f_1016 x -0.080032 +f_1025 x f_1016 x -0.046169 +f_1025 x f_1025 x 0.040995 +f_1025 x f_1025 x 0.015184 +f_1025 x f_1025 x -0.038587 +f_1025 x f_1025 x 0.115313 +f_1025 x f_1025 x -0.025057 +f_1026 x f_1017 x -0.134662 +f_1026 x f_1017 x -0.173454 +f_1026 x f_1017 x -0.107414 +f_1026 x f_1017 x -0.072375 +f_1026 x f_1017 x -0.096127 +f_1026 x f_1026 x -0.027845 +f_1026 x f_1026 x -0.109461 +f_1026 x f_1026 x 0.14858 +f_1026 x f_1026 x -0.049125 +f_1026 x f_1026 x 0.001497 +m_1040 x m_1040 x 0.221399 +m_1040 x m_1040 x 0.279534 +m_1040 x m_1040 x 0.199229 +m_1040 x m_1040 x 0.133006 +m_1040 x m_1040 x 0.082303 +m_1040 x m_1044 x -0.049536 +m_1040 x m_1044 x -0.113089 +m_1040 x m_1044 x -0.149159 +m_1040 x m_1044 x -0.116671 +m_1040 x m_1044 x -0.111438 +m_1041 x m_1041 x 0.051518 +m_1041 x m_1041 x 0.08079 +m_1041 x m_1041 x 0.071167 +m_1041 x m_1041 x 0.077873 +m_1041 x m_1041 x 0.120539 +m_1041 x m_1045 x -0.109798 +m_1041 x m_1045 x -0.019602 +m_1041 x m_1045 x -0.018571 +m_1041 x m_1045 x -0.097454 +m_1041 x m_1045 x -0.14162 +m_1042 x m_1042 x 0.239908 +m_1042 x m_1042 x 0.394366 +m_1042 x m_1042 x 0.424995 +m_1042 x m_1042 x 0.362606 +m_1042 x m_1042 x 0.083466 +m_1042 x m_1046 x -0.082171 +m_1042 x m_1046 x -0.082347 +m_1042 x m_1046 x 0.019412 +m_1042 x m_1046 x -0.132104 +m_1042 x m_1046 x -0.10197 +m_1043 x m_1043 x 0.141103 +m_1043 x m_1043 x 0.151438 +m_1043 x m_1043 x 0.123697 +m_1043 x m_1043 x 0.187986 +m_1043 x m_1043 x 0.112817 +m_1043 x m_1047 x -0.077024 +m_1043 x m_1047 x -0.042302 +m_1043 x m_1047 x -0.026802 +m_1043 x m_1047 x -0.083944 +m_1043 x m_1047 x -0.155431 +m_1044 x m_1044 x -0.028161 +m_1044 x m_1044 x 0.054529 +m_1044 x m_1044 x 0.13168 +m_1044 x m_1044 x 0.038872 +m_1044 x m_1044 x 0.077572 +m_1044 x m_1048 x -0.213132 +m_1044 x m_1048 x -0.193029 +m_1044 x m_1048 x -0.200924 +m_1044 x m_1048 x -0.16708 +m_1044 x m_1048 x -0.204056 +m_1045 x m_1045 x 0.153144 +m_1045 x m_1045 x 0.093438 +m_1045 x m_1045 x 0.087949 +m_1045 x m_1045 x 0.160263 +m_1045 x m_1045 x 0.084367 +m_1045 x m_1049 x -0.045984 +m_1045 x m_1049 x -0.118589 +m_1045 x m_1049 x -0.018129 +m_1045 x m_1049 x -0.108371 +m_1045 x m_1049 x -0.158667 +m_1046 x m_1046 x -0.106347 +m_1046 x m_1046 x 0.159463 +m_1046 x m_1046 x 0.269966 +m_1046 x m_1046 x 0.168759 +m_1046 x m_1046 x 0.289834 +m_1046 x m_1050 x -0.101596 +m_1046 x m_1050 x -0.128711 +m_1046 x m_1050 x -0.059498 +m_1046 x m_1050 x -0.173279 +m_1046 x m_1050 x -0.110372 +m_1047 x m_1047 x 0.071048 +m_1047 x m_1047 x 0.20056 +m_1047 x m_1047 x 0.176091 +m_1047 x m_1047 x 0.098561 +m_1047 x m_1047 x 0.164626 +m_1047 x m_1051 x -0.093315 +m_1047 x m_1051 x -0.018984 +m_1047 x m_1051 x -0.103095 +m_1047 x m_1051 x -0.077934 +m_1047 x m_1051 x -0.118351 +m_1048 x m_1048 x 0.377338 +m_1048 x m_1048 x 0.424671 +m_1048 x m_1048 x 0.297769 +m_1048 x m_1048 x -0.005302 +m_1048 x m_1048 x 0.196666 +m_1048 x m_1052 x -0.069208 +m_1048 x m_1052 x -0.177879 +m_1048 x m_1052 x -0.10231 +m_1048 x m_1052 x -0.122667 +m_1048 x m_1052 x -0.068862 +m_1049 x m_1040 x -0.153227 +m_1049 x m_1040 x -0.184595 +m_1049 x m_1040 x -0.136615 +m_1049 x m_1040 x -0.077627 +m_1049 x m_1040 x -0.106458 +m_1049 x m_1049 x 0.111003 +m_1049 x m_1049 x 0.101531 +m_1049 x m_1049 x 0.123256 +m_1049 x m_1049 x 0.12464 +m_1049 x m_1049 x 0.051604 +m_1050 x m_1041 x -0.054181 +m_1050 x m_1041 x -0.140659 +m_1050 x m_1041 x -0.129502 +m_1050 x m_1041 x -0.108929 +m_1050 x m_1041 x -0.032078 +m_1050 x m_1050 x 0.126906 +m_1050 x m_1050 x 0.13685 +m_1050 x m_1050 x 0.033093 +m_1050 x m_1050 x 0.047939 +m_1050 x m_1050 x -0.013868 +m_1051 x m_1042 x -0.153977 +m_1051 x m_1042 x -0.113284 +m_1051 x m_1042 x -0.23003 +m_1051 x m_1042 x -0.186212 +m_1051 x m_1042 x -0.145767 +m_1051 x m_1051 x 0.235478 +m_1051 x m_1051 x 0.207846 +m_1051 x m_1051 x 0.278796 +m_1051 x m_1051 x 0.142962 +m_1051 x m_1051 x 0.180351 +m_1052 x m_1043 x -0.178691 +m_1052 x m_1043 x -0.197601 +m_1052 x m_1043 x -0.129918 +m_1052 x m_1043 x -0.167795 +m_1052 x m_1043 x -0.175029 +m_1052 x m_1052 x 0.082763 +m_1052 x m_1052 x 0.112163 +m_1052 x m_1052 x 0.188003 +m_1052 x m_1052 x 0.044418 +m_1052 x m_1052 x 0.127454 +f_1014 x f_1015 x 0.014841 +f_1014 x f_1015 x -0.026769 +f_1014 x f_1015 x -0.080662 +f_1014 x f_1015 x -0.085209 +f_1014 x f_1015 x -0.072679 +f_1015 x f_1016 x -0.164857 +f_1015 x f_1016 x -0.178725 +f_1015 x f_1016 x -0.128464 +f_1015 x f_1016 x -0.214679 +f_1015 x f_1016 x -0.134944 +f_1016 x f_1017 x -0.014597 +f_1016 x f_1017 x -0.071501 +f_1016 x f_1017 x -0.128072 +f_1016 x f_1017 x -0.123337 +f_1016 x f_1017 x -0.116541 +f_1017 x f_1018 x -0.141496 +f_1017 x f_1018 x -0.196624 +f_1017 x f_1018 x -0.173068 +f_1017 x f_1018 x -0.230658 +f_1017 x f_1018 x -0.205358 +f_1018 x f_1019 x -0.048368 +f_1018 x f_1019 x -0.043071 +f_1018 x f_1019 x -0.049429 +f_1018 x f_1019 x -0.014632 +f_1018 x f_1019 x -0.093057 +f_1019 x f_1020 x -0.124173 +f_1019 x f_1020 x -0.122335 +f_1019 x f_1020 x -0.078392 +f_1019 x f_1020 x -0.211568 +f_1019 x f_1020 x -0.221264 +f_1020 x f_1021 x -0.190812 +f_1020 x f_1021 x -0.130903 +f_1020 x f_1021 x -0.148297 +f_1020 x f_1021 x -0.218195 +f_1020 x f_1021 x -0.130123 +f_1021 x f_1022 x -0.020938 +f_1021 x f_1022 x 0.032565 +f_1021 x f_1022 x 0.029753 +f_1021 x f_1022 x 0.008387 +f_1021 x f_1022 x -0.029518 +f_1022 x f_1023 x -0.065429 +f_1022 x f_1023 x -0.0499 +f_1022 x f_1023 x -0.092752 +f_1022 x f_1023 x -0.115253 +f_1022 x f_1023 x -0.043749 +f_1023 x f_1024 x -0.160373 +f_1023 x f_1024 x -0.073335 +f_1023 x f_1024 x -0.05861 +f_1023 x f_1024 x -0.094012 +f_1023 x f_1024 x -0.056688 +f_1024 x f_1025 x -0.328486 +f_1024 x f_1025 x -0.308301 +f_1024 x f_1025 x -0.220186 +f_1024 x f_1025 x -0.365362 +f_1024 x f_1025 x -0.178491 +f_1025 x f_1026 x -0.098447 +f_1025 x f_1026 x -0.079008 +f_1025 x f_1026 x -0.120396 +f_1025 x f_1026 x -0.092791 +f_1025 x f_1026 x -0.052482 +f_1026 x f_1014 x -0.066869 +f_1026 x f_1014 x -0.139432 +f_1026 x f_1014 x -0.037634 +f_1026 x f_1014 x -0.20375 +f_1026 x f_1014 x -0.132627 +m_1040 x m_1041 x -0.045661 +m_1040 x m_1041 x -0.025406 +m_1040 x m_1041 x -0.075282 +m_1040 x m_1041 x -0.05577 +m_1040 x m_1041 x -0.070087 +m_1041 x m_1042 x -0.205976 +m_1041 x m_1042 x -0.130663 +m_1041 x m_1042 x -0.081094 +m_1041 x m_1042 x -0.097618 +m_1041 x m_1042 x -0.021077 +m_1042 x m_1043 x -0.037937 +m_1042 x m_1043 x -0.002371 +m_1042 x m_1043 x 0.012176 +m_1042 x m_1043 x -0.093591 +m_1042 x m_1043 x -0.038423 +m_1043 x m_1044 x -0.101432 +m_1043 x m_1044 x -0.039491 +m_1043 x m_1044 x -0.11965 +m_1043 x m_1044 x -0.109702 +m_1043 x m_1044 x -0.156936 +m_1044 x m_1045 x -0.085479 +m_1044 x m_1045 x -0.13362 +m_1044 x m_1045 x -0.12149 +m_1044 x m_1045 x -0.075713 +m_1044 x m_1045 x -0.08801 +m_1045 x m_1046 x -0.106102 +m_1045 x m_1046 x -0.141614 +m_1045 x m_1046 x -0.150365 +m_1045 x m_1046 x -0.123084 +m_1045 x m_1046 x -0.201897 +m_1046 x m_1047 x -0.125069 +m_1046 x m_1047 x -0.168533 +m_1046 x m_1047 x -0.112757 +m_1046 x m_1047 x -0.1736 +m_1046 x m_1047 x -0.172724 +m_1047 x m_1048 x -0.166386 +m_1047 x m_1048 x -0.170671 +m_1047 x m_1048 x -0.058329 +m_1047 x m_1048 x -0.109204 +m_1047 x m_1048 x -0.122232 +m_1048 x m_1049 x -0.204613 +m_1048 x m_1049 x -0.219919 +m_1048 x m_1049 x -0.146424 +m_1048 x m_1049 x -0.16871 +m_1048 x m_1049 x -0.142253 +m_1049 x m_1050 x -0.051034 +m_1049 x m_1050 x -0.103298 +m_1049 x m_1050 x -0.035702 +m_1049 x m_1050 x -0.100288 +m_1049 x m_1050 x -0.00913 +m_1050 x m_1051 x -0.073954 +m_1050 x m_1051 x -0.099813 +m_1050 x m_1051 x -0.044652 +m_1050 x m_1051 x -0.043802 +m_1050 x m_1051 x -0.139938 +m_1051 x m_1052 x -0.109771 +m_1051 x m_1052 x -0.121056 +m_1051 x m_1052 x -0.102811 +m_1051 x m_1052 x -0.097827 +m_1051 x m_1052 x -0.106235 +m_1052 x m_1040 x -0.129523 +m_1052 x m_1040 x -0.167863 +m_1052 x m_1040 x -0.179332 +m_1052 x m_1040 x -0.169263 +m_1052 x m_1040 x -0.188729 diff --git a/bob/bio/base/test/test_io.py b/bob/bio/base/test/test_io.py new file mode 100644 index 0000000000000000000000000000000000000000..fa908d46bf2b6c49c56edbc159ac0efc898cf6da --- /dev/null +++ b/bob/bio/base/test/test_io.py @@ -0,0 +1,326 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Andre Anjos <andre.anjos@idiap.ch> +# Wed 11 Dec 15:14:08 2013 CET +# +# Copyright (C) 2011-2013 Idiap Research Institute, Martigny, Switzerland + +"""Tests the IO functionality of bob.bio.base.score.""" + +import numpy +import tempfile +import os +import shutil +import pkg_resources + +from .. import score + + +def test_load_scores(): + # This function tests the IO functionality of loading score files in + # different ways + + load_functions = {'4col': score.four_column, + '5col': score.five_column} + cols = {'4col': 4, '5col': 5} + + for variant in cols: + normal_score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/dev-%s.txt' % variant) + normal_scores = list(load_functions[variant](normal_score_file)) + + assert len(normal_scores) == 910 + assert all(len(s) == cols[variant] for s in normal_scores) + + # read the compressed score file + compressed_score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/dev-%s.tar.gz' % variant) + compressed_scores = list(load_functions[variant](compressed_score_file)) + + assert len(compressed_scores) == len(normal_scores) + assert all(len(c) == cols[variant] for c in compressed_scores) + assert all(c[i] == s[i] for c, s in zip(compressed_scores, + normal_scores) for i in range(cols[variant])) + + # Use auto-estimated score file contents + # read score file in normal way + normal_scores = list(score.scores(normal_score_file)) + + assert len(normal_scores) == 910 + assert all(len(s) == cols[variant] for s in normal_scores) + + # read the compressed score file + compressed_scores = list(score.scores(compressed_score_file)) + + assert len(compressed_scores) == len(normal_scores) + assert all(len(c) == cols[variant] for c in compressed_scores) + assert all(c[i] == s[i] for c, s in zip(compressed_scores, + normal_scores) for i in range(cols[variant])) + + +def test_split_scores(): + # This function tests the IO functionality of loading score files in + # different ways + + split_functions = {'4col': score.split_four_column, + '5col': score.split_five_column} + cols = {'4col': 4, '5col': 5} + + for variant in cols: + # read score file in normal way + normal_score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/dev-%s.txt' % variant) + negatives, positives = split_functions[variant](normal_score_file) + + assert len(negatives) == 520, len(negatives) + assert len(positives) == 390, len(positives) + + # read the compressed score file + compressed_score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/dev-%s.tar.gz' % variant) + negatives, positives = split_functions[variant](compressed_score_file) + + assert len(negatives) == 520, len(negatives) + assert len(positives) == 390, len(positives) + + # Use auto-estimated score file contents + # read score file in normal way + negatives, positives = score.split(normal_score_file) + + assert len(negatives) == 520, len(negatives) + assert len(positives) == 390, len(positives) + + # read the compressed score file + negatives, positives = score.split(compressed_score_file) + + assert len(negatives) == 520, len(negatives) + assert len(positives) == 390, len(positives) + + +def test_load_score(): + # This function tests the IO functionality of loading score files in + # different ways + + scores = [] + cols = {'4col': 4, '5col': 5} + + for variant in cols: + compressed_score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/dev-%s.tar.gz' % variant) + normal_score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/dev-%s.txt' % variant) + normal_scores = score.load_score( + normal_score_file, cols[variant]) + + assert len(normal_scores) == 910 + assert len(normal_scores.dtype) == cols[variant] + + # read the compressed score file + compressed_score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/dev-%s.tar.gz' % variant) + compressed_scores = score.load_score( + compressed_score_file, cols[variant]) + + assert len(compressed_scores) == len(normal_scores) + assert len(compressed_scores.dtype) == cols[variant] + for name in normal_scores.dtype.names: + assert all(normal_scores[name] == compressed_scores[name]) + + # test minimal loading + minimal_scores = score.load_score( + normal_score_file, minimal=True) + assert len(minimal_scores) == 910 + assert len(minimal_scores.dtype) == 3 + assert minimal_scores.dtype.names == ('claimed_id', 'real_id', 'score') + + +def test_dump_score(): + # This function tests the IO functionality of dumping score files + + scores = [] + cols = {'4col': 4, '5col': 5} + + for variant in cols: + # read score file + normal_score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/dev-%s.txt' % variant) + normal_scores = score.load_score( + normal_score_file, cols[variant]) + + with tempfile.TemporaryFile() as f: + score.dump_score(f, normal_scores) + f.seek(0) + loaded_scores = score.load_score(f, cols[variant]) + + for name in normal_scores.dtype.names: + assert all(normal_scores[name] == loaded_scores[name]) + + +def _check_binary_identical(name1, name2): + # see: http://www.peterbe.com/plog/using-md5-to-check-equality-between-files + from hashlib import md5 + # tests if two files are binary identical + with open(name1, 'rb') as f1: + with open(name2, 'rb') as f2: + assert md5(f1.read()).digest() == md5(f2.read()).digest() + + +def test_openbr_verify(): + # This function tests that the conversion to the OpenBR verify file works + # as expected + temp_dir = tempfile.mkdtemp(prefix='bob_test') + + # define output files + openbr_extensions = ('.mtx', '.mask') + matrix_file, mask_file = [os.path.join( + temp_dir, "scores%s") % ext for ext in openbr_extensions] + + try: + for variant in ('4col', '5col'): + # get score file + score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/scores-cmc-%s.txt' % variant) + + # first round, do not define keyword arguments -- let the file get the + # gallery and probe ids automatically + kwargs = {} + for i in range(2): + # get the files by automatically obtaining the identities + score.write_matrix( + score_file, matrix_file, mask_file, score_file_format="%sumn" % variant, **kwargs) + + assert os.path.isfile(matrix_file) and os.path.isfile(mask_file) + + # check that they are binary identical to the reference files (which + # are tested to work and give the same results with OpenBR) + matrix_ref, mask_ref = [pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/scores%s' % ext) for ext in openbr_extensions] + _check_binary_identical(matrix_file, matrix_ref) + _check_binary_identical(mask_file, mask_ref) + + # define new kwargs for second round, i.e., define model and probe names + # these names are identical to what is found in the score file, which + # in turn comes from the AT&T database + model_type = {"4col": "%d", "5col": "s%d"}[variant] + dev_ids = (3, 4, 7, 8, 9, 13, 15, 18, 19, 22, 23, + 25, 28, 30, 31, 32, 35, 37, 38, 40) + kwargs['model_names'] = [model_type % c for c in dev_ids] + kwargs['probe_names'] = ["s%d/%d" % + (c, i) for c in dev_ids for i in (1, 3, 6, 8, 10)] + + finally: + shutil.rmtree(temp_dir) + + +def test_openbr_search(): + # This function tests that the conversion to the OpenBR search file works + # as expected + temp_dir = tempfile.mkdtemp(prefix='bob_test') + + # define output files + openbr_extensions = ('.mtx', '.mask') + matrix_file, mask_file = [os.path.join( + temp_dir, "search%s") % ext for ext in openbr_extensions] + + try: + for variant in ('4col', '5col'): + # get score file + score_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/scores-cmc-%s.txt' % variant) + + # first round, do not define keyword arguments -- let the file get the + # gallery and probe ids automatically + kwargs = {} + for i in range(2): + # get the files by automatically obtaining the identities + score.write_matrix( + score_file, matrix_file, mask_file, score_file_format="%sumn" % variant, search=50, **kwargs) + + assert os.path.isfile(matrix_file) and os.path.isfile(mask_file) + + # check that they are binary identical to the reference files (which + # are tested to work and give the same results with OpenBR) + matrix_ref, mask_ref = [pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/search%s' % ext) for ext in openbr_extensions] + _check_binary_identical(matrix_file, matrix_ref) + _check_binary_identical(mask_file, mask_ref) + + # define new kwargs for second round, i.e., define model and probe names + # these names are identical to what is found in the score file, which + # in turn comes from the AT&T database + model_type = {"4col": "%d", "5col": "s%d"}[variant] + dev_ids = (3, 4, 7, 8, 9, 13, 15, 18, 19, 22, 23, + 25, 28, 30, 31, 32, 35, 37, 38, 40) + kwargs['model_names'] = [model_type % c for c in dev_ids] + kwargs['probe_names'] = ["s%d/%d" % + (c, i) for c in dev_ids for i in (1, 3, 6, 8, 10)] + + finally: + shutil.rmtree(temp_dir) + + +def test_from_openbr(): + # This function tests that the conversion from the OpenBR matrices work as + # expected + temp_dir = tempfile.mkdtemp(prefix='bob_test') + + # define input files + openbr_extensions = ('.mtx', '.mask') + matrix_file, mask_file = [pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/scores%s' % ext) for ext in openbr_extensions] + + score_file = os.path.join(temp_dir, "scores") + load_functions = {'4col': score.four_column, + '5col': score.five_column} + + try: + for variant in load_functions: + # first, do not define keyword arguments -- let the file get the model + # and probe ids being created automatically + score.write_score_file( + matrix_file, mask_file, score_file, score_file_format="%sumn" % variant) + assert os.path.exists(score_file) + # read the score file with bobs functionality + columns = list(load_functions[variant](score_file)) + + # check the contents + assert len(columns) == 2000 + + # now, generate model and probe names and ids + model_type = {"4col": "%d", "5col": "s%d"}[variant] + dev_ids = (3, 4, 7, 8, 9, 13, 15, 18, 19, 22, 23, + 25, 28, 30, 31, 32, 35, 37, 38, 40) + model_names = ["s%d" % c for c in dev_ids] + probe_names = ["s%d/%d" % (c, i) + for c in dev_ids for i in (1, 3, 6, 8, 10)] + models_ids = ["%d" % c for c in dev_ids] + probes_ids = ["%d" % c for c in dev_ids for i in (1, 3, 6, 8, 10)] + + score.write_score_file(matrix_file, mask_file, score_file, models_ids=models_ids, probes_ids=probes_ids, + model_names=model_names, probe_names=probe_names, score_file_format="%sumn" % variant) + + # check that we re-generated the bob score file + reference_file = pkg_resources.resource_filename( + 'bob.bio.base.test', 'data/scores-cmc-%s.txt' % variant) + + # assert that we can (almost) reproduce the score file + # ... read both files + columns = list(load_functions[variant](score_file)) + reference = list(load_functions[variant](reference_file)) + assert len(columns) == len(reference) + for i in range(len(columns)): + for j in range(len(columns[i]) - 1): + # check that the model and probe names are fine + assert columns[i][j] == reference[i][j], str( + columns[i]) + " != " + str(reference[i]) + # check that the score is close (OpenBR write scores in float32 + # precision only) + assert abs(columns[i][-1] - numpy.float32(reference[i][-1]) + ) <= 1e-8, str(columns[i][-1]) + " != " + str(reference[i][-1]) + + #assert numpy.isclose(columns[i][-1], reference[i][-1], atol = 1e-3, rtol=1e-8), str(columns[i][-1]) + " != " + str(reference[i][-1]) + assert numpy.allclose(columns[i][-1], reference[i][-1], atol=1e-3, + rtol=1e-8), str(columns[i][-1]) + " != " + str(reference[i][-1]) + + finally: + shutil.rmtree(temp_dir) diff --git a/bob/bio/base/test/test_scripts.py b/bob/bio/base/test/test_scripts.py index 072a431b03af1eea9afa23d96ddb211a1ec9e183..912dd325fdf635ee1cf1cf957317fbf6d00800ee 100644 --- a/bob/bio/base/test/test_scripts.py +++ b/bob/bio/base/test/test_scripts.py @@ -8,6 +8,7 @@ import nose import bob.io.image import bob.bio.base from . import utils +from .. import score from nose.plugins.skip import SkipTest @@ -20,7 +21,6 @@ data_dir = pkg_resources.resource_filename('bob.bio.base', 'test/data') def _verify(parameters, test_dir, sub_dir, ref_modifier="", score_modifier=('scores',''), counts=3, check_zt=True): from bob.bio.base.script.verify import main - import bob.measure try: main(parameters) @@ -42,7 +42,7 @@ def _verify(parameters, test_dir, sub_dir, ref_modifier="", score_modifier=('sco d = [] # read reference and new data for score_file in (score_files[i], reference_files[i]): - f = bob.measure.load.open_file(score_file) + f = score.open_file(score_file) d_ = [] for line in f: if isinstance(line, bytes): line = line.decode('utf-8') @@ -278,7 +278,6 @@ def test_verify_filelist(): ] from bob.bio.base.script.verify import main - import bob.measure try: main(parameters) @@ -292,8 +291,8 @@ def test_verify_filelist(): for i in (0,1): # load scores - a1, b1 = bob.measure.load.split_four_column(score_files[i]) - a2, b2 = bob.measure.load.split_four_column(reference_files[i]) + a1, b1 = score.split_four_column(score_files[i]) + a2, b2 = score.split_four_column(reference_files[i]) # sort scores a1 = sorted(a1); a2 = sorted(a2); b1 = sorted(b1); b2 = sorted(b2) @@ -323,7 +322,6 @@ def test_verify_missing(): ] from bob.bio.base.script.verify import main - import bob.measure try: main(parameters) @@ -336,7 +334,7 @@ def test_verify_missing(): for i in (0,1): # load scores - a, b = bob.measure.load.split_four_column(score_files[i]) + a, b = score.split_four_column(score_files[i]) assert numpy.all(numpy.isnan(a)) assert numpy.all(numpy.isnan(b)) @@ -479,15 +477,14 @@ def test_fusion(): # execute the script from bob.bio.base.script.fuse_scores import main - import bob.measure try: main(parameters) # assert that we can read the two files, and that they contain the same number of lines as the original file for i in (0,1): assert os.path.exists(output_files[i]) - r = bob.measure.load.four_column(reference_files[i]) - o = bob.measure.load.four_column(output_files[i]) + r = score.four_column(reference_files[i]) + o = score.four_column(output_files[i]) assert len(list(r)) == len(list(o)) finally: shutil.rmtree(test_dir) diff --git a/bob/bio/base/tools/scoring.py b/bob/bio/base/tools/scoring.py index 18aed256117d7c06dcb5dab84b50c25c5305ded0..eb634b96d9f286dffa9a588effa0cd2a204b4719 100644 --- a/bob/bio/base/tools/scoring.py +++ b/bob/bio/base/tools/scoring.py @@ -1,7 +1,6 @@ import bob.io.base import bob.learn.em import bob.learn.linear -import bob.measure import numpy import os, sys import tarfile @@ -12,6 +11,7 @@ logger = logging.getLogger("bob.bio.base") from .FileSelector import FileSelector from .. import utils +from .. import score def _scores(algorithm, reader, model, probe_objects, allow_missing_files): """Compute scores for the given model and a list of probes. @@ -62,12 +62,12 @@ def _scores(algorithm, reader, model, probe_objects, allow_missing_files): def _open_to_read(score_file): - """Checks for the existence of the normal and the compressed version of the file, and calls :py:func:`bob.measure.load.open_file` for the existing one.""" + """Checks for the existence of the normal and the compressed version of the file, and calls :py:func:`bob.bio.base.score.open_file` for the existing one.""" if not os.path.exists(score_file): score_file += '.tar.bz2' if not os.path.exists(score_file): raise IOError("The score file '%s' cannot be found. Aborting!" % score_file) - return bob.measure.load.open_file(score_file) + return score.open_file(score_file) def _open_to_write(score_file, write_compressed): @@ -115,7 +115,8 @@ def _delete(score_file, write_compressed): def _save_scores(score_file, scores, probe_objects, client_id, write_compressed): - """Saves the scores of one model into a text file that can be interpreted by :py:func:`bob.measure.load.split_four_column`.""" + """Saves the scores of one model into a text file that can be interpreted by + :py:func:`bob.bio.base.score.split_four_column`.""" assert len(probe_objects) == scores.shape[1] # open file for writing @@ -493,7 +494,9 @@ def _concat(score_files, output, write_compressed, model_ids): def concatenate(compute_zt_norm, groups = ['dev', 'eval'], write_compressed = False, add_model_id = False): """Concatenates all results into one (or two) score files per group. - Score files, which were generated per model, are concatenated into a single score file, which can be interpreter by :py:func:`bob.measure.load.split_four_column`. + Score files, which were generated per model, are concatenated into a single + score file, which can be interpreter by + :py:func:`bob.bio.base.score.load.split_four_column`. The score files are always re-computed, regardless if they exist or not. **Parameters:** @@ -563,7 +566,7 @@ def calibrate(compute_zt_norm, groups = ['dev', 'eval'], prior = 0.5, write_comp logger.info(" - Calibration: Training calibration for type %s from group %s", norm, groups[0]) llr_trainer = bob.learn.linear.CGLogRegTrainer(prior, 1e-16, 100000) - training_scores = list(bob.measure.load.split_four_column(training_score_file)) + training_scores = list(score.split_four_column(training_score_file)) for i in (0,1): h = numpy.array(training_scores[i]) # remove NaN's @@ -582,7 +585,7 @@ def calibrate(compute_zt_norm, groups = ['dev', 'eval'], prior = 0.5, write_comp logger.info(" - Calibration: calibrating scores from '%s' to '%s'", score_file, calibrated_file) # iterate through the score file and calibrate scores - scores = bob.measure.load.four_column(_open_to_read(score_file)) + scores = score.four_column(_open_to_read(score_file)) f = _open_to_write(calibrated_file, write_compressed) diff --git a/doc/index.rst b/doc/index.rst index 59c610e4569e3f3b516883877b853dbb27acaba6..2b966a5d00794c070ff4578ccbe667253e593a4f 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -78,6 +78,7 @@ Users Guide filelist-guide more annotations + openbr Reference Manual diff --git a/doc/openbr.rst b/doc/openbr.rst new file mode 100644 index 0000000000000000000000000000000000000000..348d3b77d861a7c0c29eb4aa65887d86a5b6e3c9 --- /dev/null +++ b/doc/openbr.rst @@ -0,0 +1,105 @@ + +.. _bob.bio.base.openbr: + +===================== +Score file conversion +===================== +Sometimes, it is required to export the score files generated by Bob to a +different format, e.g., to be able to generate a plot comparing Bob's systems +with other systems. In this package, we provide source code to convert between +different types of score files. + +Bob to OpenBR +------------- +One of the supported formats is the matrix format that the National Institute +of Standards and Technology (NIST) uses, and which is supported by OpenBR_. +The scores are stored in two binary matrices, where the first matrix (usually +with a ``.mtx`` filename extension) contains the raw scores, while a second +mask matrix (extension ``.mask``) contains information, which scores are +positives, and which are negatives. +To convert from Bob's four column or five column score file to a pair of these +matrices, you can use the :py:func:`bob.bio.base.score.openbr.write_matrix` function. +In the simplest way, this function takes a score file +``'five-column-sore-file'`` and writes the pair ``'openbr.mtx', 'openbr.mask'`` +of OpenBR_ compatible files: + +.. code-block:: py + + >>> bob.bio.base.score.openbr.write_matrix('five-column-sore-file', 'openbr.mtx', 'openbr.mask', score_file_format = '5column') + +In this way, the score file will be parsed and the matrices will be written in +the same order that is obtained from the score file. +For most of the applications, this should be sufficient, but as the identity +information is lost in the matrix files, no deeper analysis is possible anymore +when just using the matrices. To enforce an order of the models and probes +inside the matrices, you can use the ``model_names`` and ``probe_names`` +parameters of :py:func:`bob.bio.base.score.openbr.write_matrix`: + +* The ``probe_names`` parameter lists the ``path`` elements stored in the score + files, which are the fourth column in a ``5column`` file, and the third + column in a ``4column`` file, see :py:func:`bob.bio.base.score.load.five_column` and + :py:func:`bob.bio.base.score.load.four_column`. + +* The ``model_names`` parameter is a bit more complicated. In a ``5column`` + format score file, the model names are defined by the second column of that + file, see :py:func:`bob.bio.base.score.load.five_column`. In a ``4column`` format + score file, the model information is not contained, but only the client + information of the model. Hence, for the ``4column`` format, the + ``model_names`` actually lists the client ids found in the first column, see + :py:func:`bob.bio.base.score.load.four_column`. + +.. warning:: + + The model information is lost, but required to write the matrix files. In + the ``4column`` format, we use client ids instead of the model + information. Hence, when several models exist per client, this function + will not work as expected. + +Additionally, there are fields in the matrix files, which define the gallery +and probe list files that were used to generate the matrix. These file names +can be selected with the ``gallery_file_name`` and ``probe_file_name`` keyword +parameters of :py:func:`bob.bio.base.score.openbr.write_matrix`. +Finally, OpenBR defines a specific ``'search'`` score file format, which is +designed to be used to compute CMC curves. The score matrix contains +descendingly sorted and possibly truncated list of scores, i.e., for each +probe, a sorted list of all scores for the models is generated. To generate +these special score file format, you can specify the ``search`` parameter. It +specifies the number of highest scores per probe that should be kept. If the +``search`` parameter is set to a negative value, all scores will be kept. If +the ``search`` parameter is higher as the actual number of models, ``NaN`` +scores will be appended, and the according mask values will be set to ``0`` +(i.e., to be ignored). +OpenBR to Bob +------------- +On the other hand, you might also want to generate a Bob-compatible (four or +five column) score file based on a pair of OpenBR matrix and mask files. This +is possible by using the :py:func:`bob.bio.base.score.openbr.write_score_file` +function. At the basic, it takes the given pair of matrix and mask files, as +well as the desired output score file: + +.. code-block:: py + + >>> bob.bio.base.score.openbr.write_score_file('openbr.mtx', 'openbr.mask', 'four-column-sore-file') + +This score file is sufficient to compute a CMC curve (see `bob.measure`), however it +does not contain relevant client ids or paths for models and probes. +Particularly, it assumes that each client has exactly one associated model. +To add/correct these information, you can use additional parameters to +:py:func:`bob.bio.base.score.openbr.write_score_file`. Client ids of models and +probes can be added using the ``models_ids`` and ``probes_ids`` keyword +arguments. The length of these lists must be identical to the number of models +and probes as given in the matrix files, **and they must be in the same order +as used to compute the OpenBR matrix**. This includes that the same +same-client and different-client pairs as indicated by the OpenBR mask will be +generated, which will be checked inside the function. +To add model and probe path information, the ``model_names`` and +``probe_names`` parameters, which need to have the same size and order as the +``models_ids`` and ``probes_ids``. These information are simply stored in the +score file, and no further check is applied. + +.. note:: The ``model_names`` parameter is used only when writing score files in ``score_file_format='5column'``, in the ``'4column'`` format, this parameter is ignored. + + +.. Place youre references here: +.. _openbr: http://openbiometrics.org + diff --git a/doc/py_api.rst b/doc/py_api.rst index c9841b2bcc2bd386e1cdf21b04a4e7a30a1dd806..4d52687cbea4d63cf1e3855f9095f9f975cec249 100644 --- a/doc/py_api.rst +++ b/doc/py_api.rst @@ -94,6 +94,26 @@ Scoring bob.bio.base.tools.concatenate bob.bio.base.tools.calibrate +Loading data +------------ +.. autosummary:: + bob.bio.base.score.load.open_file + bob.bio.base.score.load.scores + bob.bio.base.score.load.split + bob.bio.base.score.load.cmc + bob.bio.base.score.load.four_column + bob.bio.base.score.load.split_four_column + bob.bio.base.score.load.cmc_four_column + bob.bio.base.score.load.five_column + bob.bio.base.score.load.split_five_column + bob.bio.base.score.load.cmc_five_column + +OpenBR conversions +------------------ +.. autosummary:: + bob.bio.base.score.openbr.write_matrix + bob.bio.base.score.openbr.write_score_file + Details ------- @@ -108,5 +128,6 @@ Details .. autoclass:: FileSelector - +.. automodule:: bob.bio.base.score.load +.. automodule:: bob.bio.base.score.openbr .. include:: links.rst