コード例 #1
0
    def save_metadata(self):
        trial_name = 'trial_{0:04d}'.format(self.trial_counter)
        file_list = [f for f in os.listdir(self.data_dir) if f.startswith(trial_name)]
        """ create a document """
        doc = odml.Document()
        """ create dataset section """
        ds = odml.Section('datasets', 'dataset')
        p = odml.Property('files', None)
        ds.append(p)
        for f in file_list:
            p.append('{0:s}/{1:s}'.format(self.data_dir, f))
        doc.append(ds)

        for t in list(self.metadata_tabs.values()):
            m = t.metadata()
            if m.type == 'recording':
                v = odml.Value(self.record_timestamp, dtype='datetime')
                m.append(odml.Property('StartTime', v))
            doc.append(m)

        for cam_name, cam in list(self.cameras.items()):
            s = odml.Section(cam_name,'hardware/camera')
        if not cam.is_raspicam():
            v = odml.Value(frames_per_second, unit="Hz")
            s.append(odml.Property('Framerate', v))
            for p, v in list(cam.get_properties().items()):
                prop = odml.Property(p, v)
                s.append(prop)
            doc.append(s)
        doc.append(self.event_list)
        print(self.event_list)

        from odml.tools.xmlparser import XMLWriter
        writer = XMLWriter(doc)
        writer.write_file('{0}/{1}.xml'.format(self.data_dir, trial_name))
コード例 #2
0
ファイル: types.py プロジェクト: digaru19/odml-ui
 def test_int(self):
     v = odml.Value(value="123456789012345678901", dtype="int")
     self.assertEqual(v.data, 123456789012345678901)
     self.assertEqual(v.value, "123456789012345678901")
     v = odml.Value(value="-123456789012345678901", dtype="int")
     self.assertEqual(v.data, -123456789012345678901)
     v = odml.Value(value="123.45", dtype="int")
     self.assertEqual(v.data, 123)
コード例 #3
0
def get_location(location):
    if location == 'old':
        loc = odml.Value(data='Inst. de Neurosciences Cognitives de la '
                         'Mediterranee (INCM), GLM, CNRS - Aix Marseille '
                         'Univ., Marseille, France',
                         dtype=odml.DType.string)
    elif location == 'new':
        loc = odml.Value(data='Inst. de Neurosciences de la Timone (INT), '
                         'UMR 7289, CNRS - Aix Marseille Univ., '
                         'Marseille, France',
                         dtype=odml.DType.string)
    else:
        loc = default_value(odml.DType.url)

    return loc
コード例 #4
0
 def clicked_tag(self):
     ts = str(datetime.now()).split('.')[0]
     text, ok = QtWidgets.QInputDialog.getText(self, 'Tag data with Event', 'Enter tag comment:')
     """ write tags into .xml (odML) file """
     if ok:
         tag_name = 'event_{0:02d}'.format(len(self.event_list))
         e = odml.Section(tag_name, 'event')
         e.append(odml.Property('timestamp', odml.Value(ts, dtype='datetime')))
         e.append(odml.Property('comment', odml.Value(text, dtype='string')))
         self.event_list.append(e)
     """ write tags into the .dat file as pure text """
     trial_info_filename = '{0:s}/trial_{1:04d}_info.dat'.format(self.data_dir, self.trial_counter)
     with open(trial_info_filename, 'a') as f:
         timestamp = datetime.now().strftime(("tag-time:" + "\t" + "%Y-%m-%d  %H:%M:%S:%f")[:-3] + "\t" + text)
         f.write(timestamp + '\n')
コード例 #5
0
 def test_dependence(self):
     a = self.p
     b = self.p
     self.assertEqual(a, b)
     a.value = odml.Value(5)
     self.assertEqual(a, b)
     self.assertEqual(a.value, b.value)
コード例 #6
0
ファイル: types.py プロジェクト: digaru19/odml-ui
    def test_8bit_binary(self):
        data = ''.join([chr(i) for i in xrange(256)])
        v = odml.Value(data, dtype="binary")

        v.encoder = "base64"
        b64_data = 'AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w=='
        self.assertEqual(v.value, b64_data)
        v.value = b64_data
        self.assertEqual(v.data, data)
        self.assertEqual(v.value, b64_data)

        v.encoder = "quoted-printable"
        qp_data = '=00=01=02=03=04=05=06=07=08=09\n=0B=0C\r=0E=0F=10=11=12=13=14=15=16=17=18=19=1A=1B=1C=1D=1E=1F !"#$%&\'()*+,-=\n./0123456789:;<=3D>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuv=\nwxyz{|}~=7F=80=81=82=83=84=85=86=87=88=89=8A=8B=8C=8D=8E=8F=90=91=92=93=94=\n=95=96=97=98=99=9A=9B=9C=9D=9E=9F=A0=A1=A2=A3=A4=A5=A6=A7=A8=A9=AA=AB=AC=AD=\n=AE=AF=B0=B1=B2=B3=B4=B5=B6=B7=B8=B9=BA=BB=BC=BD=BE=BF=C0=C1=C2=C3=C4=C5=C6=\n=C7=C8=C9=CA=CB=CC=CD=CE=CF=D0=D1=D2=D3=D4=D5=D6=D7=D8=D9=DA=DB=DC=DD=DE=DF=\n=E0=E1=E2=E3=E4=E5=E6=E7=E8=E9=EA=EB=EC=ED=EE=EF=F0=F1=F2=F3=F4=F5=F6=F7=F8=\n=F9=FA=FB=FC=FD=FE=FF'
        self.assertEqual(v.value, qp_data)
        v.value = qp_data
        self.assertEqual(v.data, data)
        self.assertEqual(v.value, qp_data)

        v.encoder = "hexadecimal"
        hex_data = '000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff'
        self.assertEqual(v.value, hex_data)
        v.value = hex_data
        self.assertEqual(v.data, data)
        self.assertEqual(v.value, hex_data)

        self.assertEqual(v.checksum, 'crc32$29058c73')
        v.checksum = "md5"
        self.assertEqual(v.checksum, 'md5$e2c865db4162bed963bfaa9ef6ac18f0')
        v.encoder = ''
        v.data = v.data[:127]  # chrs > 128 cannot be converted to ascii
        v.dtype = "string"
        self.assertIsNone(v.encoder)
        self.assertIsNone(v.checksum)
        self.assertEqual(v.value, data[:127])
コード例 #7
0
ファイル: eventtest.py プロジェクト: asobolev/python-odml
 def test_pre_post_change(self):
     res = []
     func = lambda context: res.append(
         (context.preChange, context.postChange))
     odml.getImplementation().Value._Changed += func
     a = odml.Value(1)
     a.value = 2
     odml.getImplementation().Value._Changed -= func
     self.assertEqual(res, [(True, False), (False, True)])
コード例 #8
0
ファイル: eventtest.py プロジェクト: asobolev/python-odml
    def test_event_passing(self):
        s = odml.Section(name="section")
        v = odml.Value(1)
        p = odml.Property(name="prop", value=v)
        s.append(p)

        v.data = 4
        self.assertEqual(v._modified, [v])
        self.assertEqual(p._modified, [v, p])
        self.assertEqual(s._modified, [v, p, s])
        self.assertEqual(v.data, 4)
コード例 #9
0
ファイル: types.py プロジェクト: digaru19/odml-ui
 def test_empty_binary(self):
     v = odml.Value("", dtype="string")
     v.dtype = "binary"
     v.encoding = "base64"
     self.assertIsNone(v.value)
     v.encoding = "quoted-printable"
     self.assertIsNone(v.value)
     v.encoding = "hexadecimal"
     self.assertIsNone(v.value)
     self.assertEqual(v.checksum, 'crc32$00000000')
     v.checksum = "md5"
     self.assertEqual(v.checksum, 'md5$d41d8cd98f00b204e9800998ecf8427e')
コード例 #10
0
ファイル: eventtest.py プロジェクト: asobolev/python-odml
    def test_simple_events(self):
        a = odml.Value(1)
        a._value = 2
        self.assertEqual(a.data, 2)
        # modifying a protected attribute should not make a call,
        # thus the _modified property won't be set
        self.assertRaises(AttributeError, lambda: a._modified)

        a.data = 3
        self.assertEqual(a.data, 3)
        self.assertIs(a._modified[0], a)
        self.assertEqual(a._context.val, ("data", 3))
        self.assertTrue(a._context.postChange)
コード例 #11
0
    def append(self, value):
        """
        adds a value to the list of values

        If *value* is not an odml.Value instance, such an instance will be created
        given the addition function arguments (see :ref:`__init__` for their description).

        If *value* is not an odml.Value instance and *unit*, *dtype* or *uncertainty* are
        missing, the values will be copied from the last value in this properties
        value-list if *copy_attributes* is True. If there is no value present to be
        copied from, an IndexError will be raised.
        """
        if not isinstance(value, odml_value.Value):
            value = odml.Value(value)
        self._values.append(value)
        value._property = self
コード例 #12
0
    def __init__(self,
                 name,
                 value,
                 definition=None,
                 dependency=None,
                 dependency_value=None,
                 mapping=None):
        """
        Create a new Property with one single or multiple values. If something is passed as value that
        is not a Value object, the method will try to infer the values dtype from the type of the
        parameter.

        Example for a property with a single value
        >>> Property("property1", odml.Value(2)) #or
        >>> Property("property1", 2)

        Example for a property with multiple values
        >>> Property("property2", [odml.Value(data=1), odml.Value(data=2)]) #or
        >>> Property("property2", [1, 2])

        :param name: The mane of the property
        :param value: Either a Value or some type a Value can be created from or a list of values.
        :param definition: The definition of the property.
        :param dependency: Another property this property depends on.
        :param dependency_value: Dependency on a certain value.
        :param mapping: Mapping information of the property.
        """
        #TODO doc description for arguments
        #TODO validate arguments
        self._name = name
        self._section = None
        self._reset_values()

        self.definition = definition
        self.dependency = dependency
        self.dependency_value = dependency_value
        self._mapping = mapping

        if isinstance(value, list):
            for v in value:
                if not isinstance(v, odml_value.Value):
                    v = odml.Value(v)
                self.append(v)
        elif value is not None:
            self.append(value)
コード例 #13
0
def fill_odml_with_xls(doc, xls, source_filename):
    """
    """
    for d in xls:
        prop_path = ':'.join([d['Path'], d['Property Name']])
        prop = doc.get_property_by_path(prop_path)
        if len(d['Value']) == 1 and len(prop.values) == 1:
            prop.value.data = d['Value'][0]
            prop.value.dtype = d['odML Data Type'][0]
            prop.value.filename = source_filename
            if len(d['Data Unit']) > 0:
                prop.value.unit = d['Data Unit'][0]
            if len(d['Data Uncertainty']) > 0:
                prop.value.uncertainty = d['Data Uncertainty'][0]

        elif len(d['Value']) > 1 and len(prop.values) == 1:
            for i, v in enumerate(d['Value']):
                if i == 0:
                    prop.value.data = v
                    prop.value.filename = source_filename
                    if len(d['Data Unit']) > 0:
                        prop.value.unit = d['Data Unit'][i]
                    if len(d['Data Uncertainty']) > 0:
                        prop.value.uncertainty = d['Data Uncertainty'][i]
                else:
                    prop.values.append(
                        odml.Value(data=v,
                                   dtype=d['odML Data Type'][i],
                                   unit=d['Data Unit'][i]
                                   if len(d['Data Unit']) > 0 else '',
                                   uncertainty=d['Data Uncertainty']
                                   if len(d['Data Uncertainty']) > 0 else '',
                                   filename=source_filename))

        elif len(prop.values) == len(d['Value']):
            for i, v in enumerate(d['Value']):
                prop.values[i].data = d['Value'][i]
                prop.values[i].dtype = d['odML Data Type'][i]
                prop.values[i].filename = source_filename
                if len(d['Data Unit']) > 0:
                    prop.values[i].unit = d['Data Unit'][i]
                if len(d['Data Uncertainty']) > 0:
                    prop.values[i].uncertainty = d['Data Uncertainty'][i]
コード例 #14
0
def propcsv2odmltree(load_from, document):
    """
    Writing odml properties within an csv to an odml tree.
    """
    pdict = propcsv2dict(load_from)

    for pname in pdict.keys():
        values = []
        for i in range(len(pdict[pname]['Value'])):
            values.append(
                odml.Value(data=pdict[pname]['Value'][i],
                           dtype=pdict[pname]['odML Data Type'][i],
                           unit=pdict[pname]['Data Unit'],
                           uncertainty=pdict[pname]['Data Uncertainty'],
                           definition=pdict[pname]['Value Definition']))

        prop = document.get_property_by_path(pdict[pname]['Path 2 Property'])
        prop.definition = pdict[pname]['Property Definition']
        prop.values = values
コード例 #15
0
def default_value(dtype, unit=None):
    """
    Returns an odML Value with default data of the given DType

    Args:
        dtype (odml.DType):
            DType of the default data
        unit (string, optional):
            Unit of the default data

    Returns:
        (odml.value.BaseValue):
            odML Value with default data, dtype and unit

    Note:
        Valid DTypes: odml.DType.text, odml.DType.string, odml.DType.person,
        odml.DType.url, odml.DType.binary, odml.DType.boolean, odml.DType.int,
        odml.DType.date, odml.DType.datetime
    """
    if dtype in [
            odml.DType.text, odml.DType.string, odml.DType.person,
            odml.DType.binary
    ]:
        data = '-'
    elif dtype == odml.DType.url:
        data = 'file://-'
    elif dtype == odml.DType.boolean:
        data = False
    elif dtype == odml.DType.int:
        data = -1
    elif dtype == odml.DType.float:
        data = -1.0
    elif dtype == odml.DType.date:
        data = datetime.date(1111, 11, 11)
    elif dtype == odml.DType.datetime:
        data = datetime.datetime(1111, 11, 11, 11, 11, 11)
    elif dtype == odml.DType.time:
        data = datetime.time(11, 11, 11)
    else:
        raise TypeError('Unknown DType')

    return odml.Value(data=data, dtype=dtype, unit=unit)
コード例 #16
0
 def create_value(self, content):
     return odml.Value(content)
コード例 #17
0
 def test_independence(self):
     a = self.p.clone()
     b = self.p.clone()
     self.assertEqual(a, b)
     a.value = odml.Value(5)
     self.assertNotEqual(a, b)
コード例 #18
0
 def test_value_float(self):
     v = odml.Value(value="1.5", dtype="float")
     self.assertEqual(v.data, 1.5)
コード例 #19
0
 def test_conversion_float_to_int(self):
     v = odml.Value(value="1.5", dtype="float")
     v.dtype = "int"
     self.assertEqual(v.dtype, "int")
     self.assertEqual(v.data, 1)
コード例 #20
0
 def test_conversion_int_to_float(self):
     v = odml.Value(value="1", dtype="int")
     v.dtype = "float"  # change dtype
     self.assertEqual(v.dtype, "float")
     self.assertEqual(v.data, 1.0)
     self.assertEqual(v.value, "1.0")
コード例 #21
0
    def uploadToGNode(self):

        self.csvData = extractCSVMetaData(self.csvFile, self.expName)

        self.dataBlockToUpload = Block(name=self.blockName, file_origin=self.expName)

        raw_seg = Segment(name='rawData', index=0)

        self.vibrationSignal.name = 'Vibration Stimulus'
        self.vibrationSignal.description = 'Vibration Stimulus applied to the honey bee antenna'
        self.voltageSignal.name = 'Membrane Potential'
        self.voltageSignal.description = 'Vibration Sensitive inter-neuron membrane potential'
        self.vibrationSignal.segment = raw_seg
        self.voltageSignal.segment = raw_seg

        raw_seg.analogsignals.append(self.vibrationSignal)
        raw_seg.analogsignals.append(self.voltageSignal)

        if len(self.dataBlock.segments[0].analogsignals) > 2:

            self.currentSignal.name = 'Current Signal'
            self.currentSignal.description = 'Indicates whether a current is being injected or not. The magnitudes ' \
                                             'are given in an event array'

            self.currentSignal.segment = raw_seg
            raw_seg.analogsignals.append(self.currentSignal)

            if len(self.dataBlock.segments[0].eventarrays) == 2:
                raw_seg.eventarrays.append(self.dataBlock.segments[0].eventarrays[1])
                self.dataBlock.segments[0].eventarrays[1].segment = raw_seg

        raw_seg.block = self.dataBlockToUpload
        self.dataBlockToUpload.segments.append(raw_seg)

        self.doc = odml.Document(author="Ajayrama K.", version="1.0")

        self.mainSec = odml.Section(name=self.expName, type='experiment')
        self.doc.append(self.mainSec)

        expSummary = odml.Section(name='VibrationStimulus', type='experiment/electrophysiology')

        quantity_parser = lambda lst: [odml.Value(data=float(x), unit=x.dimensionality.string) for x in lst]

        frequencies = quantity_parser(self.csvData['freqs'])
        if frequencies:
            expSummary.append(odml.Property(name='FrequenciesUsed', value=frequencies))

        durations = quantity_parser(self.csvData['pulse'][0])
        if durations:
            expSummary.append(odml.Property(name='PulseInputDurations', value=durations))

        intervals = quantity_parser(self.csvData['pulse'][1])
        if intervals:
            expSummary.append(odml.Property(name='PulseInputIntervals', value=intervals))

        expSummary.append(odml.Property(name='SpontaneousActivityPresence', value=self.csvData['spont']))

        if not self.csvData['resp'] == '':
            expSummary.append(odml.Property(name='NatureOfResponse', value=self.csvData['resp']))

        self.mainSec.append(expSummary)

        print asctime() + ' : Uploading metadata'
        doc = self.session.set_all(self.doc)
        print asctime() + ' : Uploading metadata Done'

        print asctime() + ' : Refreshing metadata'
        mainSec = self.session.get(doc.sections[0].location, refresh=True, recursive=True)
        print asctime() + ' : Refreshing metadata Done'

        self.dataBlockToUpload.section = mainSec

        print asctime() + ' : Uploading Data'
        blkLoc = self.session.set_all(self.dataBlockToUpload)
        print asctime() + ' : Uploading Data Done'
コード例 #22
0
def rej_tree(rej_names=[]):
    """
    Builds an odML Document for reach-to-grasp preprocessing metadata

    Returns:
        (odml.doc.BaseDocument)
            odML Document with default reach-to-grasp preprocessing metadata
    """

    # CREATE A DOCUMENT
    doc = odml.Document(version='0.1')

    # APPEND MAIN SECTION
    doc.append(
        odml.Section(name='RejectionsLFP',
                     type='preprocessing',
                     definition='Information on rejection of '
                     'experimental LFP signals'))

    # SET PARENT NODE
    parent = doc['RejectionsLFP']

    # APPEND SUBSECTIONS
    for rejn in rej_names:
        parent.append(
            odml.Section(name=rejn,
                         type='subject/preparation',
                         definition='Information on rejection '
                         'performed on this LFP band'))

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(
            name='LFPBands',
            value=[
                odml.Value(data=data, dtype=odml.DType.string)
                for data in rej_names
            ] if len(rej_names) > 0 else default_value(odml.DType.string),
            definition='Information on which LFP bands '
            'the rejection was performed'))

    if len(rej_names) > 0:
        for rejn in rej_names:
            # SET PARENT NODE
            parent = doc['RejectionsLFP'][rejn]

            # APPEND SUBSECTIONS

            # APPEND PROPERTIES WITH DEFAULT VALUES
            parent.append(
                odml.Property(name='Highcut',
                              value=default_value(odml.DType.float),
                              definition='High cut frequency of '
                              'rejection filter'))

            parent.append(
                odml.Property(name='Lowcut',
                              value=default_value(odml.DType.float),
                              definition='Low cut frequency of '
                              'rejection filter'))

            parent.append(
                odml.Property(name='Order',
                              value=default_value(odml.DType.int),
                              definition='Order of rejection filter'))

            parent.append(
                odml.Property(name='RejElectrodes',
                              value=default_value(odml.DType.int),
                              definition='ID list of rejected '
                              'electrodes'))

            parent.append(
                odml.Property(name='RejTrials',
                              value=default_value(odml.DType.int),
                              definition='ID list of rejected '
                              'trials'))

    return doc
コード例 #23
0
def rg_setup_tree(location='-'):
    """
    Builds an odML Document for reach-to-grasp setup metadata

    Returns:
        (odml.doc.BaseDocument)
            odML Document with default reach-to-grasp setup metadata
    """
    # CREATE A DOCUMENT
    doc = odml.Document(version='0.1')

    # APPEND MAIN SECTION
    doc.append(
        odml.Section(name='Setup',
                     type='setup',
                     definition='Information on the experimental '
                     'setup'))

    # SET PARENT NODE
    parent = doc['Setup']

    # APPEND SUBSECTIONS
    parent.append(
        odml.Section(name='Apparatus',
                     type='setup',
                     definition='Information on the experimental '
                     'apparatus'))

    parent.append(
        odml.Section(name='ControlComputer',
                     type='setup/software',
                     definition='Information on the experimental '
                     'control'))

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Location',
                      value=get_location(location),
                      definition='Location of the setup'))

    parent.append(
        odml.Property(name='Description',
                      value=default_value(odml.DType.url),
                      definition='Setup description URL'))

    parent.append(
        odml.Property(name='DAQSystem',
                      value=odml.Value(data='Cerebus',
                                       dtype=odml.DType.string),
                      definition='DAQ system used'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']

    # APPEND SUBSECTIONS
    parent.append(
        odml.Section(name='StartSwitch',
                     type='setup',
                     definition='Information on the start switch'))

    parent.append(
        odml.Section(name='TargetObject',
                     type='setup',
                     definition='Information on the target object'))

    parent.append(
        odml.Section(name='CueSystem',
                     type='setup',
                     definition='Information on the cue system'))

    parent.append(
        odml.Section(name='RewardSystem',
                     type='setup',
                     definition='Information on the reward system'))

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Manufacturer',
                      value=odml.Value(data='NI A/D Card (ref?)',
                                       dtype=odml.DType.string),
                      definition='Owner of the setup'))

    parent.append(
        odml.Property(name='Creator',
                      value=odml.Value(data='Thomas Brochier',
                                       dtype=odml.DType.string),
                      definition='Full name of person who created '
                      'the setup'))

    parent.append(
        odml.Property(name='Maintainer',
                      value=odml.Value(data='Thomas Brochier',
                                       dtype=odml.DType.string),
                      definition='Full name of person who maintains '
                      'the setup'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']['StartSwitch']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Function',
                      value=odml.Value(data='activates start trial',
                                       dtype=odml.DType.string),
                      definition='Function of apparatus'))

    parent.append(
        odml.Property(name='Type',
                      value=odml.Value(data='table switch',
                                       dtype=odml.DType.string),
                      definition='Type of apparatus'))

    parent.append(
        odml.Property(name='SignalType',
                      value=odml.Value(data='analog', dtype=odml.DType.string),
                      definition='Signal type of apparatus (digital '
                      'or analog)'))

    parent.append(
        odml.Property(name='Events',
                      value=[
                          odml.Value(data=data, dtype=odml.DType.string)
                          for data in ['TS', 'SR']
                      ],
                      definition='Names of events extracted from '
                      'this signal'))

    parent.append(
        odml.Property(name='SamplingRate',
                      value=odml.Value(data=30000,
                                       dtype=odml.DType.int,
                                       unit='samples/sec'),
                      definition='Sampling rate of data'))

    parent.append(
        odml.Property(name='ConnectedTo',
                      value=odml.Value(data='NeuralSignalProcessor',
                                       dtype=odml.DType.string),
                      definition='Target device of apparatus'))

    parent.append(
        odml.Property(name='MonitoredBy',
                      value=odml.Value(data='LabVIEW',
                                       dtype=odml.DType.string),
                      definition='Control software of apparatus'))

    parent.append(
        odml.Property(name='SavedIn',
                      value=odml.Value(data='nev', dtype=odml.DType.string),
                      definition='File in which apparatus signals '
                      'are saved'))

    parent.append(
        odml.Property(name='Length',
                      value=default_value(odml.DType.float, unit='cm'),
                      definition='Length of apparatus'))

    parent.append(
        odml.Property(name='Width',
                      value=default_value(odml.DType.float, unit='cm'),
                      definition='Length of apparatus'))

    parent.append(
        odml.Property(name='Height',
                      value=default_value(odml.DType.float, unit='mm'),
                      definition='Length of apparatus'))

    parent.append(
        odml.Property(name='PosX',
                      value=odml.Value(data=5.0,
                                       dtype=odml.DType.float,
                                       unit='cm'),
                      definition='X position of apparatus'))

    parent.append(
        odml.Property(name='PosY',
                      value=odml.Value(data=0.0,
                                       dtype=odml.DType.float,
                                       unit='cm'),
                      definition='Y position of apparatus'))

    parent.append(
        odml.Property(name='PosZ',
                      value=odml.Value(data=0.0,
                                       dtype=odml.DType.float,
                                       unit='cm'),
                      definition='Z position of apparatus'))

    parent.append(
        odml.Property(name='PosOrigin',
                      value=odml.Value(data='midline, waist-level',
                                       dtype=odml.DType.string),
                      definition='Origin for xyz position of '
                      'apparatus'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']['TargetObject']

    # APPEND SUBSECTIONS
    parent.append(
        odml.Section(name='FSRSensor',
                     type='setup/daq',
                     definition='Information on the FSR sensors'))

    parent.append(
        odml.Section(name='HESensor',
                     type='setup/daq',
                     definition='Information on the hall-effect '
                     'sensor'))

    parent.append(
        odml.Section(name='LoadForce',
                     type='setup/daq',
                     definition='Information on the load force '
                     'signal'))

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Function',
                      value=odml.Value(data='object to grasp, pull '
                                       'and hold',
                                       dtype=odml.DType.string),
                      definition='Function of apparatus'))

    parent.append(
        odml.Property(name='Type',
                      value=odml.Value(data='stainless steel '
                                       'parallelpiped',
                                       dtype=odml.DType.string),
                      definition='Type of apparatus'))

    parent.append(
        odml.Property(name='Length',
                      value=odml.Value(data=40.0,
                                       dtype=odml.DType.float,
                                       unit='mm'),
                      definition='Length of apparatus'))

    parent.append(
        odml.Property(name='Width',
                      value=odml.Value(data=16.0,
                                       dtype=odml.DType.float,
                                       unit='mm'),
                      definition='Width of apparatus'))

    parent.append(
        odml.Property(name='Height',
                      value=odml.Value(data=10.0,
                                       dtype=odml.DType.float,
                                       unit='mm'),
                      definition='Height of apparatus'))

    parent.append(
        odml.Property(name='AttachedTo',
                      value=odml.Value(data='anterior end of a low- '
                                       'friction horizontal '
                                       'shuttle',
                                       dtype=odml.DType.string),
                      definition='Device apparatus is attached to'))

    parent.append(
        odml.Property(name='Rotation',
                      value=odml.Value(data=45.0,
                                       dtype=odml.DType.float,
                                       unit='degree'),
                      definition='Rotation of apparatus from '
                      'vertical axis'))

    parent.append(
        odml.Property(name='PosX',
                      value=odml.Value(data=5.0,
                                       dtype=odml.DType.float,
                                       unit='cm'),
                      definition='X position of apparatus'))

    parent.append(
        odml.Property(name='PosY',
                      value=odml.Value(data=13.0,
                                       dtype=odml.DType.float,
                                       unit='cm'),
                      definition='Y position of apparatus'))

    parent.append(
        odml.Property(name='PosZ',
                      value=odml.Value(data=14.0,
                                       dtype=odml.DType.float,
                                       unit='cm'),
                      definition='Z position of apparatus'))

    parent.append(
        odml.Property(name='PosOrigin',
                      value=odml.Value(data='midline, waist-level',
                                       dtype=odml.DType.string),
                      definition='Origin for xyz position of '
                      'apparatus'))

    parent.append(
        odml.Property(name='PullRange',
                      value=[
                          odml.Value(data=data,
                                     dtype=odml.DType.float,
                                     unit='mm') for data in [0.0, 15.0]
                      ],
                      definition='Minimum and maximum pull range '
                      'of target object'))

    parent.append(
        odml.Property(name='WeightRange',
                      value=[
                          odml.Value(data=data,
                                     dtype=odml.DType.float,
                                     unit='g') for data in [0.0, 800.0]
                      ],
                      definition='Minimum and maximum weight range '
                      'of target object'))

    parent.append(
        odml.Property(name='WeightSwitch',
                      value=odml.Value(data='activation of magnet',
                                       dtype=odml.DType.string),
                      definition='Mechanism to switch weight '
                      'configuration'))

    parent.append(
        odml.Property(name='Sensors',
                      value=[
                          odml.Value(data=data, dtype=odml.DType.string)
                          for data in ['FSRSensor', 'HESensor', 'LoadForce']
                      ],
                      definition='Sensors providing additional '
                      'analogue signals to monitor '
                      'task and behavior'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']['TargetObject']['FSRSensor']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Function',
                      value=odml.Value(data='measures grip and '
                                       'pulling load forces by '
                                       'means of force '
                                       'sensitive resistances '
                                       '(FSR)',
                                       dtype=odml.DType.string),
                      definition='Function of apparatus'))

    parent.append(
        odml.Property(name='SGChannelIDs',
                      value=[
                          odml.Value(data=data, dtype=odml.DType.int)
                          for data in [138, 140]
                      ],
                      definition='Channel IDs of FSR sensors to '
                      'measure load forces of side grip'))

    parent.append(
        odml.Property(name='PGChannelIDs',
                      value=[
                          odml.Value(data=data, dtype=odml.DType.int)
                          for data in [137, 139]
                      ],
                      definition='Channel IDs of FSR sensors to '
                      'measure load forces of precision '
                      'grip'))

    parent.append(
        odml.Property(name='SignalType',
                      value=odml.Value(data='analog', dtype=odml.DType.string),
                      definition='Signal type of apparatus (digital '
                      'or analog)'))

    parent.append(
        odml.Property(name='Events',
                      value=[
                          odml.Value(data=data, dtype=odml.DType.string)
                          for data in ['OT', 'OR', 'HS', 'BTB']
                      ],
                      definition='Names of events extracted from '
                      'this signal'))

    parent.append(
        odml.Property(name='SamplingRate',
                      value=odml.Value(data=1000,
                                       dtype=odml.DType.int,
                                       unit='samples/sec'),
                      definition='Sampling rate of data'))

    parent.append(
        odml.Property(name='ConnectedTo',
                      value=odml.Value(data='NeuralSignalProcessor',
                                       dtype=odml.DType.string),
                      definition='Target device of apparatus'))

    parent.append(
        odml.Property(name='MonitoredBy',
                      value=odml.Value(data='LabVIEW',
                                       dtype=odml.DType.string),
                      definition='Control software of apparatus'))

    parent.append(
        odml.Property(name='ControlledBy',
                      value=odml.Value(data='LabVIEW',
                                       dtype=odml.DType.string),
                      definition='Control software of apparatus'))

    parent.append(
        odml.Property(name='SavedIn',
                      value=odml.Value(data='ns2', dtype=odml.DType.string),
                      definition='File in which apparatus signals '
                      'are saved'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']['TargetObject']['HESensor']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Function',
                      value=odml.Value(data='hall effect (HE) sensor'
                                       ' measures horizontal '
                                       'displacement',
                                       dtype=odml.DType.string),
                      definition='Function of apparatus'))

    parent.append(
        odml.Property(name='Count',
                      value=odml.Value(data=1, dtype=odml.DType.int),
                      definition='Number of hall-effect sensors'))

    parent.append(
        odml.Property(name='ChannelID',
                      value=odml.Value(data=143, dtype=odml.DType.int),
                      definition='Channel ID of HESensor to '
                      'measure horizontal object '
                      'displacement'))

    parent.append(
        odml.Property(name='Events',
                      value=[
                          odml.Value(data=data, dtype=odml.DType.string)
                          for data in ['OT', 'OR', 'HS', 'BTB']
                      ],
                      definition='Names of events extracted from '
                      'this signal'))

    parent.append(
        odml.Property(name='SignalType',
                      value=odml.Value(data='analog', dtype=odml.DType.string),
                      definition='Signal type of apparatus (digital '
                      'or analog)'))

    parent.append(
        odml.Property(name='SavedIn',
                      value=odml.Value(data='ns2', dtype=odml.DType.string),
                      definition='File in which apparatus signals '
                      'are saved'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']['TargetObject']['LoadForce']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Function',
                      value=odml.Value(data='used to detect load '
                                       'force of the target '
                                       'object',
                                       dtype=odml.DType.string),
                      definition='Function of apparatus'))

    parent.append(
        odml.Property(name='Count',
                      value=odml.Value(data=1, dtype=odml.DType.int),
                      definition='Number of load force signals'))

    parent.append(
        odml.Property(name='ChannelID',
                      value=odml.Value(data=141, dtype=odml.DType.int),
                      definition='Channel ID of load force signal'))

    parent.append(
        odml.Property(name='SignalType',
                      value=odml.Value(data='analog', dtype=odml.DType.string),
                      definition='Signal type of apparatus (digital '
                      'or analog)'))

    parent.append(
        odml.Property(name='SavedIn',
                      value=odml.Value(data='ns2', dtype=odml.DType.string),
                      definition='File in which apparatus signals '
                      'are saved'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']['CueSystem']

    # APPEND SUBSECTIONS
    parent.append(
        odml.Section(name='CueCodes',
                     type='setup/daq',
                     definition='Information on cue codes'))

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Function',
                      value=odml.Value(data='instructing movement '
                                       'configurations of each '
                                       'trial',
                                       dtype=odml.DType.string),
                      definition='Function of apparatus'))

    parent.append(
        odml.Property(name='Type',
                      value=odml.Value(data='visual, LED cube',
                                       dtype=odml.DType.string),
                      definition='Type of apparatus'))

    parent.append(
        odml.Property(name='SignalType',
                      value=odml.Value(data='digital',
                                       dtype=odml.DType.string),
                      definition='Signal type of apparatus (digital '
                      'or analog)'))

    parent.append(
        odml.Property(name='EventNames',
                      value=[
                          odml.Value(data=data, dtype=odml.DType.string)
                          for data in [
                              'FP-ON', 'CUE-ON', 'CUE-OFF', 'GO-ON', 'GO-OFF',
                              'ERROR-FLASH', 'VALIDATION-FLASH'
                          ]
                      ],
                      definition='Names of events extracted from '
                      'this signal'))

    parent.append(
        odml.Property(name='Length',
                      value=default_value(odml.DType.float, unit='mm'),
                      definition='Length of apparatus'))

    parent.append(
        odml.Property(name='Width',
                      value=default_value(odml.DType.float, unit='mm'),
                      definition='Width of apparatus'))

    parent.append(
        odml.Property(name='Height',
                      value=default_value(odml.DType.float, unit='mm'),
                      definition='Height of apparatus'))

    parent.append(
        odml.Property(name='PosX',
                      value=odml.Value(data=5.0,
                                       dtype=odml.DType.float,
                                       unit='cm'),
                      definition='X position of apparatus'))

    parent.append(
        odml.Property(name='PosY',
                      value=odml.Value(data=13.0,
                                       dtype=odml.DType.float,
                                       unit='cm'),
                      definition='Y position of apparatus'))

    parent.append(
        odml.Property(name='PosZ',
                      value=default_value(odml.DType.float, unit='cm'),
                      definition='Z position of apparatus'))

    parent.append(
        odml.Property(name='PosOrigin',
                      value=odml.Value(data='midline, waist-level',
                                       dtype=odml.DType.string),
                      definition='Origin for xyz position of '
                      'apparatus'))

    parent.append(
        odml.Property(name='LEDCount',
                      value=odml.Value(data=5, dtype=odml.DType.int),
                      definition='Number of LEDs'))

    parent.append(
        odml.Property(name='LEDConfiguration',
                      value=odml.Value(data='2-1-2', dtype=odml.DType.string),
                      definition='Arrangement of LEDs'))

    parent.append(
        odml.Property(name='CornerLEDColor',
                      value=odml.Value(data='red', dtype=odml.DType.string),
                      definition='Color of the corner LEDs'))

    parent.append(
        odml.Property(name='CenterLEDColor',
                      value=odml.Value(data='yellow', dtype=odml.DType.string),
                      definition='Color of the center LEDs'))

    parent.append(
        odml.Property(name='SamplingRate',
                      value=odml.Value(data=30000,
                                       dtype=odml.DType.int,
                                       unit='samples/sec'),
                      definition='Sampling rate of data'))

    parent.append(
        odml.Property(name='ConnectedTo',
                      value=odml.Value(data='NeuralSignalProcessor',
                                       dtype=odml.DType.string),
                      definition='Target device of apparatus'))

    parent.append(
        odml.Property(name='MonitoredBy',
                      value=odml.Value(data='LabVIEW',
                                       dtype=odml.DType.string),
                      definition='Control software of apparatus'))

    parent.append(
        odml.Property(name='ControlledBy',
                      value=odml.Value(data='LabVIEW',
                                       dtype=odml.DType.string),
                      definition='Control software of apparatus'))

    parent.append(
        odml.Property(name='SavedIn',
                      value=odml.Value(data='nev', dtype=odml.DType.string),
                      definition='File in which apparatus signals '
                      'are saved'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']['CueSystem']['CueCodes']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='LeftLEDs',
                      value=odml.Value(data='side grip',
                                       dtype=odml.DType.string),
                      definition='LEDs coding this trial '
                      'instruction'))

    parent.append(
        odml.Property(name='RightLEDs',
                      value=odml.Value(data='precision grip',
                                       dtype=odml.DType.string),
                      definition='LEDs coding this trial '
                      'instruction'))

    parent.append(
        odml.Property(name='BottomLEDs',
                      value=odml.Value(data='low force',
                                       dtype=odml.DType.string),
                      definition='LEDs coding this trial '
                      'instruction'))

    parent.append(
        odml.Property(name='TopLEDs',
                      value=odml.Value(data='high force',
                                       dtype=odml.DType.string),
                      definition='LEDs coding this trial '
                      'instruction'))

    parent.append(
        odml.Property(name='CenterLED',
                      value=odml.Value(data='fixation point',
                                       dtype=odml.DType.string),
                      definition='LEDs coding this trial '
                      'instruction'))

    parent.append(
        odml.Property(name='CornerLEDs',
                      value=odml.Value(data='grip error',
                                       dtype=odml.DType.string),
                      definition='LEDs coding this trial '
                      'instruction'))

    # SET PARENT NODE
    parent = doc['Setup']['Apparatus']['RewardSystem']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Function',
                      value=odml.Value(data='rewards subject if '
                                       'trial was performed '
                                       'correctly',
                                       dtype=odml.DType.string),
                      definition='Function of apparatus'))

    parent.append(
        odml.Property(name='Type',
                      value=odml.Value(data='reward pipe',
                                       dtype=odml.DType.string),
                      definition='Type of apparatus'))

    parent.append(
        odml.Property(name='SignalType',
                      value=odml.Value(data='digital',
                                       dtype=odml.DType.string),
                      definition='Signal type of apparatus (digital '
                      'or analog)'))

    parent.append(
        odml.Property(name='EventNames',
                      value=[
                          odml.Value(data=data, dtype=odml.DType.string)
                          for data in ['RW']
                      ],
                      definition='Names of events extracted from '
                      'this signal'))

    parent.append(
        odml.Property(name='RewardFood',
                      value=odml.Value(data='apple sauce',
                                       dtype=odml.DType.string),
                      definition='Food used for reward'))

    parent.append(
        odml.Property(name='RewardAmount',
                      value=odml.Value(data=0.5,
                                       dtype=odml.DType.float,
                                       unit='ml/200ms'),
                      definition='Food amount used for reward per '
                      'trial'))

    parent.append(
        odml.Property(name='SamplingRate',
                      value=odml.Value(data=30000,
                                       dtype=odml.DType.int,
                                       unit='samples/sec'),
                      definition='Sampling rate of data'))

    parent.append(
        odml.Property(name='ConnectedTo',
                      value=odml.Value(data='NeuralSignalProcessor',
                                       dtype=odml.DType.string),
                      definition='Target device of apparatus'))

    parent.append(
        odml.Property(name='MonitoredBy',
                      value=odml.Value(data='LabVIEW',
                                       dtype=odml.DType.string),
                      definition='Control software of apparatus'))

    parent.append(
        odml.Property(name='ControlledBy',
                      value=odml.Value(data='LabVIEW',
                                       dtype=odml.DType.string),
                      definition='Control software of apparatus'))

    parent.append(
        odml.Property(name='SavedIn',
                      value=odml.Value(data='nev', dtype=odml.DType.string),
                      definition='File in which apparatus signals '
                      'are saved'))

    # SET PARENT NODE
    parent = doc['Setup']['ControlComputer']

    # APPEND SUBSECTIONS
    parent.append(
        odml.Section(name='ControlSoftware',
                     type='setup/daq',
                     definition='Information on the control software'
                     ' of the Cerebus^TM system'))

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='CPU',
                      value=default_value(odml.DType.string),
                      definition='CPU model'))

    parent.append(
        odml.Property(name='RAM',
                      value=default_value(odml.DType.float, unit='GB'),
                      definition='Amount of RAM'))

    parent.append(
        odml.Property(name='Mainboard',
                      value=default_value(odml.DType.string),
                      definition='Mainboard type'))

    parent.append(
        odml.Property(name='HarddiskCapacity',
                      value=default_value(odml.DType.float, unit='GB'),
                      definition='Disk capacity of data storage'))

    parent.append(
        odml.Property(name='OSType',
                      value=default_value(odml.DType.string),
                      definition='Type of operating system'))

    parent.append(
        odml.Property(name='OSVersion',
                      value=default_value(odml.DType.string),
                      definition='Version of operating system'))

    # SET PARENT NODE
    parent = doc['Setup']['ControlComputer']['ControlSoftware']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(
        odml.Property(name='Name',
                      value=odml.Value(data='LabVIEW',
                                       dtype=odml.DType.string),
                      definition='Name of software'))

    parent.append(
        odml.Property(name='Manufacturer',
                      value=odml.Value(data='National Instruments',
                                       dtype=odml.DType.string),
                      definition='Manufacturer of software'))

    parent.append(
        odml.Property(name='Version',
                      value=default_value(odml.DType.string),
                      definition='Software version'))

    return doc
コード例 #24
0
parent.append(
    odml.Section(name="Tricia Marie McMillan",
                 type="crew/person",
                 definition="Information on Trillian Astra"))

parent.append(
    odml.Section(name="Ford Prefect",
                 type="crew/person",
                 definition="Information on Ford Prefect"))

# APPEND PROPERTIES WITH VALUES
parent.append(
    odml.Property(name="NameCrewMembers",
                  value=[
                      odml.Value(data="Arthur Philip Dent",
                                 dtype=odml.DType.person),
                      odml.Value(data="Zaphod Beeblebrox",
                                 dtype=odml.DType.person),
                      odml.Value(data="Tricia Marie McMillan",
                                 dtype=odml.DType.person),
                      odml.Value(data="Ford Prefect", dtype=odml.DType.person)
                  ],
                  definition="List of crew members names"))

parent.append(
    odml.Property(name="NoCrewMembers",
                  value=odml.Value(data=4, dtype=odml.DType.int),
                  definition="Number of crew members"))

# SET NEW PARENT NODE
parent = doc['TheCrew']['Arthur Philip Dent']
コード例 #25
0
 def test_value_int(self):
     v = odml.Value(value="1", dtype="int")
     self.assertEqual(v.data, 1)
コード例 #26
0
ファイル: PropertyView.py プロジェクト: asobolev/python-odml
        """
        popup menu action: reset property
        """
        dst = prop.get_merged_equivalent().clone()
        cmd = commands.ReplaceObject(obj=prop, repl=dst)
        self.execute(cmd)

    def set_value(self, widget, (prop, val)):
        """
        popup menu action: set value

        set the curr
        """
        model, path, obj = self.popup_data
        if val is None:
            val = odml.Value("")
        else:
            val = val.clone()

        if obj is prop:
            obj = prop.values[0]

        prop = obj._property

        # first append, then remove to keep the constraint that a property
        # will always hold at least one value
        cmd = commands.Multiple(cmds=[
            commands.AppendValue(obj=prop, val=val),
            commands.DeleteObject(obj=obj)
        ])
        self.execute(cmd)
コード例 #27
0
ファイル: project_tree.py プロジェクト: INM-6/collab-waves
def rg_project_tree(tasktype='TwoCues'):
    """
    Builds an odML Document for reach-to-grasp project metadata

    Args:
        used_taskdesign (string, optional):
            States the task design used in this subsession

    Returns:
        (odml.doc.BaseDocument)
            odML Document with default reach-to-grasp project metadata

    Note:
        Valid used_taskdesign: OneCue, TwoCues, Observation, Sleep, Mapping
    """

    # CREATE A DOCUMENT
    doc = odml.Document(version='0.1')

    # CREATE A MAIN SECTION
    doc.append(odml.Section(name='Project',
                            type='project',
                            definition='Information on the experimental '
                                       'project'))

    # SET PARENT NODE
    parent = doc['Project']

    # APPEND SUBSECTIONS
    parent.append(odml.Section(name='TaskDesigns',
                               type='project',
                               definition='Information on tasks'))

    parent.append(odml.Section(name='TrialTypeCodes',
                               type='codes',
                               definition='Information on trial type codes'))

    parent.append(odml.Section(name='ConditionCodes',
                               type='codes',
                               definition='Information on condition codes '
                                          '(trial type combination codes)'))

    parent.append(odml.Section(name='PerformanceCodes',
                               type='codes',
                               definition='Information on trial performance '
                                          'codes'))

    parent.append(odml.Section(name='TrialSettings',
                               type='setup/control',
                               definition='Information on the programmed '
                                          'trial settings'))

    parent.append(odml.Section(name='TargetObjectSettings',
                               type='setup/control',
                               definition='Information on the settings of the '
                                          'target object'))

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(odml.Property(name='Name',
                                value=odml.Value(data='reach-to-grasp',
                                                 dtype=odml.DType.string),
                                definition='Name of project'))

    parent.append(odml.Property(name='Type',
                                value=odml.Value(data='electrophysiology',
                                                 dtype=odml.DType.string),
                                definition='Type of project'))

    parent.append(odml.Property(name='Subtype',
                                value=odml.Value(data='motor behavior',
                                                 dtype=odml.DType.string),
                                definition='Name of the project'))

    parent.append(odml.Property(name='Description',
                                value=default_value(odml.DType.url),
                                definition='Project description URL'))

    parent.append(odml.Property(name='Collaborators',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in rg_collaborators()],
                                definition='Affilitations of involved '
                                           'collaborators'))

    # SET PARENT NODE
    parent = doc['Project']['TaskDesigns']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(odml.Property(name='Designs',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['OneCue', 'TwoCues',
                                                    'Observation', 'Sleep',
                                                    'Mapping']],
                                definition='Names of possible task designs'))

    parent.append(odml.Property(name='UsedDesign',
                                value=odml.Value(data=tasktype,
                                                 dtype=odml.DType.string)
                                if tasktype
                                else default_value(odml.DType.string),
                                definition='Name of used task design'))

    parent.append(odml.Property(name='Description',
                                value=default_value(odml.DType.url),
                                definition='Task designs descriptions URL'))

    # SET PARENT NODE
    parent = doc['Project']['TrialTypeCodes']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(odml.Property(name='SGLF',
                                value=odml.Value(data=89,
                                                 dtype=odml.DType.int),
                                definition='Side grip / low force code'))

    parent.append(odml.Property(name='SGHF',
                                value=odml.Value(data=86,
                                                 dtype=odml.DType.int),
                                definition='Side grip / high force code'))

    parent.append(odml.Property(name='PGLF',
                                value=odml.Value(data=169,
                                                 dtype=odml.DType.int),
                                definition='Precision grip / low force code'))

    parent.append(odml.Property(name='PGHF',
                                value=odml.Value(data=166,
                                                 dtype=odml.DType.int),
                                definition='Precision grip / high force code'))

    parent.append(odml.Property(name='LFSG',
                                value=odml.Value(data=149,
                                                 dtype=odml.DType.int),
                                definition='Low force / side grip code'))

    parent.append(odml.Property(name='LFPG',
                                value=odml.Value(data=154,
                                                 dtype=odml.DType.int),
                                definition='Low force / precision grip code'))

    parent.append(odml.Property(name='HFSG',
                                value=odml.Value(data=101,
                                                 dtype=odml.DType.int),
                                definition='High force / side grip code'))

    parent.append(odml.Property(name='HFPG',
                                value=odml.Value(data=106,
                                                 dtype=odml.DType.int),
                                definition='High force / precision grip code'))

    parent.append(odml.Property(name='SGSG',
                                value=odml.Value(data=85,
                                                 dtype=odml.DType.int),
                                definition='Side grip / side grip code'))

    parent.append(odml.Property(name='PGPG',
                                value=odml.Value(data=170,
                                                 dtype=odml.DType.int),
                                definition='Precision grip / precision grip '
                                           'code'))

    parent.append(odml.Property(name='n.d.',
                                value=odml.Value(data=0,
                                                 dtype=odml.DType.int),
                                definition='Code for not detectable trial '
                                           'type'))

    # SET PARENT NODE
    parent = doc['Project']['ConditionCodes']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(odml.Property(name='cnd_1',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['SGLF', 'SGHF',
                                                    'PGLF', 'PGHF']],
                                definition='Grip first trials, all grip and '
                                           'force types'))

    parent.append(odml.Property(name='cnd_2',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['SGLF', 'SGHF',
                                                    'PGLF', 'PGHF']],
                                definition='Force first trials, all force and '
                                           'grip types'))

    parent.append(odml.Property(name='cnd_11',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['SGLF', 'PGLF']],
                                definition='Grip first trials, all grip '
                                           'types, but only low force'))

    parent.append(odml.Property(name='cnd_12',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['SGHF', 'PGHF']],
                                definition='Grip first trials, all grip '
                                           'types, but only high force'))

    parent.append(odml.Property(name='cnd_13',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['SGHF', 'SGLF']],
                                definition='Grip first trials, only side '
                                           'grip, but all force types'))

    parent.append(odml.Property(name='cnd_14',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['PGHF', 'PGLF']],
                                definition='Grip first trials, only precision '
                                           'grip, but all force types'))

    parent.append(odml.Property(name='cnd_21',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['LFSG', 'LFPG']],
                                definition='Force first trials, only low '
                                           'force, but all grip types'))

    parent.append(odml.Property(name='cnd_22',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['HFSG', 'HFPG']],
                                definition='Force first trials, only high '
                                           'force, but all grip types'))

    parent.append(odml.Property(name='cnd_23',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['HFSG', 'LFSG']],
                                definition='Force first trials, all force '
                                           'types, but only side grip'))

    parent.append(odml.Property(name='cnd_24',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['HFPG', 'LFPG']],
                                definition='Force first trials, all force '
                                           'types, but only side grip'))

    parent.append(odml.Property(name='cnd_131',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['SGLF']],
                                definition='Grip first trials, only side '
                                           'grip, only low force'))

    parent.append(odml.Property(name='cnd_132',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['SGHF']],
                                definition='Grip first trials, only side '
                                           'grip, only high force'))

    parent.append(odml.Property(name='cnd_133',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['SGSG']],
                                definition='Grip first trials, only side '
                                           'grip, force needs to be guessed'))

    parent.append(odml.Property(name='cnd_141',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['PGLF']],
                                definition='Grip first trials, only precision '
                                           'grip, only low force'))

    parent.append(odml.Property(name='cnd_142',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['PGHF']],
                                definition='Grip first trials, only precision '
                                           'grip, only high force'))

    parent.append(odml.Property(name='cnd_144',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['PGPG']],
                                definition='Grip first trials, only precision '
                                           'grip, force needs to be guessed'))

    parent.append(odml.Property(name='cnd_213',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['LFSG']],
                                definition='Force first trials, only low '
                                           'force, only side grip'))

    parent.append(odml.Property(name='cnd_214',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['LFPG']],
                                definition='Force first trials, only low '
                                           'force, only precision grip'))

    parent.append(odml.Property(name='cnd_223',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['HFSG']],
                                definition='Force first trials, only high '
                                           'force, only side grip'))

    parent.append(odml.Property(name='cnd_224',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['HFPG']],
                                definition='Force first trials, only high '
                                           'force, only precision grip'))

    # SET PARENT NODE
    parent = doc['Project']['PerformanceCodes']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(odml.Property(name='pc_127',
                                value=odml.Value(data='correct trial',
                                                 dtype=odml.DType.string),
                                definition='Performance code of a correctly '
                                           'completed trial'))

    parent.append(odml.Property(name='pc_64',
                                value=odml.Value(data='SR < FP-ON',
                                                 dtype=odml.DType.string),
                                definition='Performance code of a trial where '
                                           'switch is released too early '
                                           '(before fixation point)'))

    parent.append(odml.Property(name='pc_96',
                                value=odml.Value(data='SR < CUE-ON',
                                                 dtype=odml.DType.string),
                                definition='Performance code of a trial where '
                                           'switch is released too early '
                                           '(before delay cue is turned on)'))

    parent.append(odml.Property(name='pc_112',
                                value=odml.Value(data='SR < CUE-OFF',
                                                 dtype=odml.DType.string),
                                definition='Performance code of a trial where '
                                           'switch is released too early '
                                           '(before delay cue is turned off)'))

    parent.append(odml.Property(name='pc_120',
                                value=odml.Value(data='SR < GO-ON',
                                                 dtype=odml.DType.string),
                                definition='Performance code of a trial where '
                                           'switch is released too early '
                                           '(before GO cue turns on)'))

    parent.append(odml.Property(name='pc_124',
                                value=odml.Value(data='no SR',
                                                 dtype=odml.DType.string),
                                definition='Performance code of a trial where '
                                           'switch is not released'))

    parent.append(odml.Property(name='pc_126',
                                value=odml.Value(data='grip error',
                                                 dtype=odml.DType.string),
                                definition='Performance code of a trial where '
                                           'the wrong grip type is used'))

    # SET PARENT NODE
    parent = doc['Project']['TrialSettings']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(odml.Property(name='DigitalEvents',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['TS', 'FP-ON', 'CUE-ON',
                                                    'CUE-OFF', 'GO-ON', 'SR',
                                                    'RW', 'GO-OFF']],
                                definition='Digital recorded trial events'))

    parent.append(odml.Property(name='AnalogEvents',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.string)
                                       for data in ['OT', 'HS', 'OR', 'BTB']],
                                definition='Analog recorded trial events'))

    parent.append(odml.Property(name='TSP',
                                value=odml.Value(data=400.0,
                                                 dtype=odml.DType.float,
                                                 unit='ms'),
                                definition='Duration of trial start period '
                                           '(period between TS and FP)'))

    parent.append(odml.Property(name='FPP',
                                value=odml.Value(data=400.0,
                                                 dtype=odml.DType.float,
                                                 unit='ms'),
                                definition='Duration of fixation point period '
                                           '(period between FP and CUE-ON)'))

    parent.append(odml.Property(name='CUE',
                                value=odml.Value(data=300.0,
                                                 dtype=odml.DType.float,
                                                 unit='ms'),
                                definition='Duration of CUE period (period '
                                           'between CUE-ON and CUE-OFF'))

    parent.append(odml.Property(name='DELAY',
                                value=odml.Value(data=1000.0,
                                                 dtype=odml.DType.float,
                                                 unit='ms'),
                                definition='Duration of delay period (period '
                                           'between CUE-OFF and GO)'))

    parent.append(odml.Property(name='HT',
                                value=odml.Value(data=500.0,
                                                 dtype=odml.DType.float,
                                                 unit='ms'),
                                definition='Duration of holding time (period '
                                           'between HS and RW)'))

    parent.append(odml.Property(name='MTLimit',
                                value=odml.Value(data=700.0,
                                                 dtype=odml.DType.float,
                                                 unit='ms'),
                                definition='Time limit for movement (period '
                                           'between GO-ON and HS)'))

    parent.append(odml.Property(name='RTLimit',
                                value=odml.Value(data=1000.0,
                                                 dtype=odml.DType.float,
                                                 unit='ms'),
                                definition='Time limit for reaction time '
                                           '(period between GO-ON and SR)'))

    parent.append(odml.Property(name='PTLimits',
                                value=default_value(odml.DType.float,
                                                    unit='ms'),
                                definition='Min and max time to pull the '
                                           'object into the holding position '
                                           '(period between OT and HS)'))

    # SET PARENT NODE
    parent = doc['Project']['TargetObjectSettings']

    # APPEND SUBSECTIONS

    # APPEND PROPERTIES WITH DEFAULT VALUES
    parent.append(odml.Property(name='HoldPosRange',
                                value=[odml.Value(data=data,
                                                  dtype=odml.DType.int,
                                                  unit='mm')
                                       for data in [4.0, 14.0]],
                                definition='Distance window for holding the '
                                           'object in place'))

    parent.append(odml.Property(name='LowForceWeight',
                                value=odml.Value(data=100.0,
                                                 dtype=odml.DType.float,
                                                 unit='g'),
                                definition='Weight of object in low force '
                                           'modus'))

    parent.append(odml.Property(name='HighForceWeight',
                                value=odml.Value(data=200.0,
                                                 dtype=odml.DType.float,
                                                 unit='g'),
                                definition='Weight of object in high force '
                                           'modus'))

    return doc