Beispiel #1
0
def test_write_pairs():
    pairs = create_pairs(datafile('R1308T_jacksheet.txt'))

    # Unsupported file type
    with tempdir() as path:
        filename = osp.join(path, "test.xyz")
        with pytest.raises(ValueError):
            write_pairs(pairs, filename)

    # CSV files
    with tempdir() as path:
        filename = osp.join(path, 'test.csv')
        write_pairs(pairs, filename)

        df = pd.read_csv(filename)
        for column in pairs.columns:
            assert all(df[column] == pairs[column])

    # JSON files
    with tempdir() as path:
        filename = osp.join(path, 'pairs.json')

        # No subject
        with pytest.raises(ValueError):
            write_pairs(pairs, filename)

        write_pairs(pairs, filename, subject='R0000X')

        with open(filename, 'r') as f:
            data = json.loads(f.read())
            assert 'R0000X' in data
Beispiel #2
0
def test_no_mux_crossing():
    pairs = create_pairs(datafile('mux_test_jacksheet.csv'))
    for pair in pairs.pair:
        if 'A' in pair:
            assert 'B' not in pair
        if 'B' in pair:
            assert 'A' not in pair
Beispiel #3
0
def test_create_pairs(filename):
    pairs = create_pairs(datafile(filename))

    assert 'pair' in pairs.columns
    assert 'label1' in pairs.columns
    assert 'label2' in pairs.columns
    assert 'contact1' in pairs.columns
    assert 'contact2' in pairs.columns
    assert 'mux' in pairs.columns

    combos = np.array([sorted(pair.split('-')) for pair in pairs.pair])
    df = pd.DataFrame({'e1': combos[:, 0], 'e2': combos[:, 1]})

    # No contact should be paired with itself
    same = [df.loc[i, 'e1'] == df.loc[i, 'e2'] for i in df.index]
    assert not any(same)

    # No pairs should be repeated
    df = pd.DataFrame({'pair': ['-'.join(combo) for combo in combos]})
    assert len(df.pair.unique()) == len(df)

    # Labels should match pairs
    for n, row in pairs.iterrows():
        assert row.label1 in row.pair
        assert row.label2 in row.pair
Beispiel #4
0
def test_pairs_to_json():
    pairs = create_pairs(datafile('R1308T_jacksheet.txt'))

    with tempdir() as path:
        pairs_to_json(pairs, 'R1308T', path)
        pair_list = pairs.pair.tolist()
        outfile = osp.join(path, 'pairs.json')
        assert osp.exists(outfile)

        with open(outfile, 'r') as f:
            result = json.loads(f.read())
            assert 'R1308T' in result.keys()
            assert 'pairs' in result['R1308T'].keys()
            for key in result['R1308T']['pairs']:
                assert key in pair_list
Beispiel #5
0
    def from_jacksheet(cls,
                       filename,
                       subject="",
                       scheme='bipolar',
                       area=0.5,
                       ignore_labels=['ECG', 'EKG']):
        """Create a new :class:`ElectrodeConfig` instance from a jacksheet.

        Parameters
        ----------
        filename : str
            Path to jacksheet file.
        subject : str
            Subject ID
        scheme : str
            Referencing scheme to use (``bipolar`` or ``monopolar``).
        area : float or str
            Default surface area to use in mm^2 when a float or a file that
            maps electrode labels to surface areas (see :meth:`read_area_file`
            for file format details).
        ignore_labels: list or tuple
            Labels to ignore within the jacksheet

        Returns
        -------
        config : ElectrodeConfig

        """
        js = read_jacksheet(filename, ignore_labels=ignore_labels)
        config = ElectrodeConfig()
        config.subject = subject
        config._jacksheet = js

        if isinstance(area, str):
            area_map = cls.read_area_file(area)
            try:
                areas = [
                    area_map[area_map.label == row.electrode].area.values[0]
                    for _, row in js.iterrows()
                ]
            except IndexError as e:
                raise IndexError(
                    str(e) + " HINT: check for typos in area file")
        else:
            areas = [area] * len(js)

        jsdf = pd.DataFrame({
            'label':
            js.label,
            'port':
            js.index,
            'area':
            areas,
            'description': ['Jackbox number {}'.format(n) for n in js.index]
        })

        contacts = [Contact.from_series(s) for _, s in jsdf.iterrows()]
        for c in contacts:
            config.contacts[c.port] = c

        if scheme == 'bipolar':
            pairs = create_pairs(filename, ignore_labels=ignore_labels)
        elif scheme == 'monopolar':
            pairs = create_monopolar_pairs(filename,
                                           ignore_labels=ignore_labels)
        else:
            raise AssertionError("Unrecognized referencing scheme")

        config.sense_channels = [
            SenseChannel.from_series(s) for _, s in pd.DataFrame({
                'name':
                pairs.label1 +
                "CR" if scheme == 'monopolar' else pairs.label1 + pairs.label2,
                'contact':
                pairs.contact1,
                'ref':
                pairs.contact2,
                'description':
                pairs.pair
            }).iterrows()
        ]

        return config
Beispiel #6
0
        write_pairs(pairs, filename)

        df = pd.read_csv(filename)
        for column in pairs.columns:
            assert all(df[column] == pairs[column])

    # JSON files
    with tempdir() as path:
        filename = osp.join(path, 'pairs.json')

        # No subject
        with pytest.raises(ValueError):
            write_pairs(pairs, filename)

        write_pairs(pairs, filename, subject='R0000X')

        with open(filename, 'r') as f:
            data = json.loads(f.read())
            assert 'R0000X' in data
            # Not testing remainder since covered in test_pairs_to_json


if __name__ == "__main__":
    from bptools.jacksheet import read_jacksheet
    from bptools.pairs import create_monopolar_pairs

    js = read_jacksheet(datafile('simple_jacksheet.txt'))
    print(create_monopolar_pairs(datafile('simple_jacksheet.txt')))
    print(create_pairs(datafile('simple_jacksheet.txt')))
    # print(create_pairs(datafile('R1306E_jacksheet.txt')))