Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

[solved] I am not able to keyboard to work with Odd Ball Task

edited April 2013 in OpenSesame

Lotje,

I was able to put together an auditory Odd ball task this weekend. Everything works! The odd ball task never occurs two times in a row. I do want to add the key board and have the person hit the space key every time they hear the target sound. I have tried to follow the tutorial creating a Gaze Cuing Experiment and have placed the key board in my experiment but when I check the excel worksheet it does not record the keystroke of the space bar.

Is there something I need to type in the script you provided for the Key board to record the hitting of the space key when a person hears the target sound?

I am sorry to bother you with this and I am hoping on can figure out the connection with Emotiv and setting the triggers on my own.

Kind Regards,

AJ

Comments

  • edited April 2013

    Hi AJ,

    Did you insert a logger item after your keyboard_response item?

    Or did you add self.log(myvar) to the code in your inline_script item? (if you're using an inline_script)

    Cheers!
    Edwin

  • edited April 2013

    Before I got your response I found your keyboard functions page and I made a _inline_script and placed it under trial sequence:

    from openexp.keyboard import keyboard
    my_keyboard = keyboard(exp, keylist=['space'], timeout=400)
    start_time = self.time()
    key, end_time = my_keyboard.get_key()
    self.experiment.set('response', key)
    self.experiment.set('response_time_keyboard_response', end_time - start_time). 
    

    The problem is that on the excel worksheet the correct response and response time will be recorded but always for the trial below the Target:

    26  None    400 non_target
    27  None    400 non_target
    28  None    400 non_target
    29  None    400 non_target
    30  None    400 target
    31  space   31  non_target
    32  None    400 target
    33  space   130 non_target
    34  None    400 non_target
    35  None    400 non_target
    36  None    400 non_target
    37  None    400 non_target
    38  None    400 non_target
    39  None    400 non_target
    40  None    400 non_target
    41  None    400 non_target
    42  None    400 non_target
    43  None    400 target
    44  space   39  non_target
    45  None    400 non_target
    46  None    400 non_target
    47  None    400 non_target
    48  None    400 non_target
    

    What am I doing wrong? is this sometime type of timing problem or did I just put the script in the wrong place. I am it is something simple I just can not figure it out.

    Best,

    AJ

  • edited 5:09PM

    From the looks of it, I'd say that your logger seems to be placed before your inline script, meaning that it will log the values of the previous trial. To verify this, could you perhaps post a screenshot of your overview (or of the relevant part only)?

  • edited April 2013

    I am sorry, I am working on a lap tap and I can not find the print screen button. Are you asking the information under trial sequence. If that is what you are requesting the order is determine_ trial_ type (script)

    # Determine the trial type of the current trial 
    # by 'popping' (i.e. taking without replacement) 
    # one item from the previously-defined trial list.
    
    # We do this by using the built-in Python function pop():
    trial_type = trial_list.pop()
    
    # Next, we should set the variable 'trial_type' to
    # make it available in the GUI (notably, the Run-if 
    # boxes in the trial_sequence item).
    
    # We do this by using the built-in OpenSesame experiment 
    # function exp.set():
    exp.set("trial_type", trial_type)
    
    ~~
    
    Then the script I placed in my last email: determine_keyboard_response
    non-target sampler
    target sampler
    sketch pad
    logger 
    
    If this may help you, block sequence has the following script:
    
    ~~~ .python
    # Import the built-in Python module random:
    import random
    
    # Define counters:
    nTarget = 50
    nNonTarget = 500
    
    
    # Create a list containing for example 50 targets and 
    # 500 non target:
    trial_list = ["target"]*nTarget+ ["non_target"]*nNonTarget
    
    # Shuffle the list by using the random.shuffle() function:
    random.shuffle(trial_list)
    
    # Check for two targets in a row:
    
    # Give the Boolean keepRunning a starting value:
    keepRunning = True
    
    # We walk through the list until our criteria are met:
    while keepRunning:
    
        # Set keepRunning to False
        keepRunning = False
    
        # For every item in the list, check whether this item AND the next
        # one are 'target' (note that we skip the very last one because
        # it has no following item):
        for i in range(len(trial_list)-1):
    
            # If the current item and the next one are 'target':
            if trial_list[i] == trial_list[i+1] == "target":
    
                # Set keepRunning to True, meaning the list doesn't meet our criteria yet:
                keepRunning = True
    
                # Swap the content of the current item and the previous one:
                trial_list[i], trial_list[i-1] = trial_list[i-1], trial_list[i]
    
                # And break from the current loop to walk through the list again:
                break
    
    # Make the trial_list global such that it becomes available in future inline_sript
    # items as well:
    global trial_list
    

    Thank you so much for being patient with me and helping me figure this out
    Kind Regards,
    AJ

  • edited April 2013

    Oh Man,
    that last comment was a mess.
    Trial Sequence:
    determine_trial_order
    determine_keyboard_response
    non_target
    target
    sketchpad
    logger

    Script for determine_trial:


    # Determine the trial type of the current trial # by 'popping' (i.e. taking without replacement) # one item from the previously-defined trial list. # We do this by using the built-in Python function pop(): trial_type = trial_list.pop() # Next, we should set the variable 'trial_type' to # make it available in the GUI (notably, the Run-if # boxes in the trial_sequence item). # We do this by using the built-in OpenSesame experiment # function exp.set(): exp.set("trial_type", trial_type)

    Script for block sequence determine_trial_order

     # Import the built-in Python module random:
    import random
    
    # Define counters:
    nTarget = 50
    nNonTarget = 500
    
    
    # Create a list containing for example 50 targets and 
    # 500 non target:
    trial_list = ["target"]*nTarget+ ["non_target"]*nNonTarget
    
    # Shuffle the list by using the random.shuffle() function:
    random.shuffle(trial_list)
    
    # Check for two targets in a row:
    
    # Give the Boolean keepRunning a starting value:
    keepRunning = True
    
    # We walk through the list until our criteria are met:
    while keepRunning:
    
        # Set keepRunning to False
        keepRunning = False
    
        # For every item in the list, check whether this item AND the next
        # one are 'target' (note that we skip the very last one because
        # it has no following item):
        for i in range(len(trial_list)-1):
    
            # If the current item and the next one are 'target':
            if trial_list[i] == trial_list[i+1] == "target":
    
                # Set keepRunning to True, meaning the list doesn't meet our criteria yet:
                keepRunning = True
    
                # Swap the content of the current item and the previous one:
                trial_list[i], trial_list[i-1] = trial_list[i-1], trial_list[i]
    
                # And break from the current loop to walk through the list again:
                break
    
    # Make the trial_list global such that it becomes available in future inline_sript
    # items as well:
    global trial_list
    
    

    Sorry again for the comment above. I hope this helps you figure things out.

    Thank You

    AJ

  • edited 5:09PM

    Let me try this one more time.

    Trial sequence
    determine_trial_ type
    determine keyboard response
    non_target: player
    Target: player
    sketch pad: fixation dot
    Logger

    I will put script for determine_ trial_ type and determine trail order in the next comment so I do not mess up again

  • edited April 2013

    determine_ trial_ type:

    # Determine the trial type of the current trial 
    # by 'popping' (i.e. taking without replacement) 
    # one item from the previously-defined trial list.
    
    # We do this by using the built-in Python function pop():
    trial_type = trial_list.pop()
    
    # Next, we should set the variable 'trial_type' to
    # make it available in the GUI (notably, the Run-if 
    # boxes in the trial_sequence item).
    
    # We do this by using the built-in OpenSesame experiment 
    # function exp.set():
    exp.set("trial_type", trial_type)
    

    determine_ trial_ order

     Import the built-in Python module random:
    import random
    
    # Define counters:
    nTarget = 50
    nNonTarget = 500
    
    
    # Create a list containing for example 50 targets and 
    # 500 non target:
    trial_list = ["target"]*nTarget+ ["non_target"]*nNonTarget
    
    # Shuffle the list by using the random.shuffle() function:
    random.shuffle(trial_list)
    
    # Check for two targets in a row:
    
    # Give the Boolean keepRunning a starting value:
    keepRunning = True
    
    # We walk through the list until our criteria are met:
    while keepRunning:
    
        # Set keepRunning to False
        keepRunning = False
    
        # For every item in the list, check whether this item AND the next
        # one are 'target' (note that we skip the very last one because
        # it has no following item):
        for i in range(len(trial_list)-1):
    
            # If the current item and the next one are 'target':
            if trial_list[i] == trial_list[i+1] == "target":
    
                # Set keepRunning to True, meaning the list doesn't meet our criteria yet:
                keepRunning = True
    
                # Swap the content of the current item and the previous one:
                trial_list[i], trial_list[i-1] = trial_list[i-1], trial_list[i]
    
                # And break from the current loop to walk through the list again:
                break
    
    # Make the trial_list global such that it becomes available in future inline_sript
    # items as well:
    global trial_list
    
  • edited 5:09PM

    Thank you so much! just moving the script and now everything works. Again I am so sorry for making such a mess of this post. Thank you also for being so patient with me

  • edited April 2013

    Haha, I think it might be useful to know that you can post text in it's original layout by using '< pre >' and '< /pre >' tags (without the spaces, mind you!), like so:

    This is some text.
        This is some more text.
    ==================
    

    Good to know that you've fixed it! If I understand correctly, you did indeed misplace the script a bit?

    Good luck with further testing!

Sign In or Register to comment.