Howdy, Stranger!

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

Supported by

[solved] Count number of times something happens in a while loop

edited July 2014 in OpenSesame

Hi all,

I have a while loop with two if statements written in an inline script. I would like to count how many times each if statement is used through the course of the experiment.

The if statements each evaluate whether a mouse click occurs within a specified area (within a green circle or within a white circle), so there isn't a correct type variable, only sets of coordinates. I could record the coordinates, but then later I would have to figure whether those coordinates were for the white or the green circle.

I'm thinking there should be a way to add a count function to each of the if statements, but I'm not having any luck.

Comments

  • edited 1:01PM

    Hi Darby,

    I'm assuming you're working with a script from the discussion below, or some variation of it, but the basic principle should work anywhere.

    What you could do is use a variable nClickErr that is incremented (+= 1) every time that an erroneous click is registered. This will give you a running total of the number of times that this happens during the entire experiment. Just read the code below carefully, and the logic should be clear (it's pretty simple).

    Is this what you had in mind?

    Cheers!
    Sebastiaan

    exp.set('xRed', 0)
    exp.set('yRed', 0)
    
    from openexp.mouse import mouse
    from math import sqrt
    
    # Create a mouse object
    my_mouse = mouse(exp, visible=True)
    
    # The maximum error from the target center
    maxClickErr = 100
    
    # Get the number of click errors and reset to 0 if this variable hasn't been
    # defined yet
    nClickErr = self.get_check('nClickErr', default=0)
    
    # Get the coordinates of the display center, which are necessary to convert
    # from top-left to center-based coordinates.
    xc = self.get('width') / 2
    yc = self.get('height') / 2
    
    # Loop until we get a hit (i.e. a correct mouse click)
    while True:
        button, pos, timestamp = my_mouse.get_click()
        cursor_x, cursor_y = pos
        # Determine x and y error
        dx = cursor_x - xc - self.get('xRed')
        dy = cursor_y - yc - self.get('yRed')
        # Break the loop if there is a hit (use Pythagoras for click error)
        clickErr = sqrt(dx**2 + dy**2)
        if clickErr <= maxClickErr:
            # Increase the number of click errors
            nClickErr += 1
            break
    # Set the number of click errors as an experiment variable.
    exp.set('nClickErr', nClickErr)
    
  • edited 1:01PM

    Thanks so much Sebastiaan. As usual, this works great.

Sign In or Register to comment.