# Continuously exactly 1 frame is dropped per trial

**URL:** <https://discourse.psychopy.org/t/continuously-exactly-1-frame-is-dropped-per-trial/2668>\
**Category:** Coding\
**Tags:** timing\
**Created:** [June 26, 2017, 11:36am UTC](https://discourse.psychopy.org/t/continuously-exactly-1-frame-is-dropped-per-trial/2668 "2017-06-26T11:36:16Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![mathis](https://avatars.discourse-cdn.com/v4/letter/m/278dde/32.png) [@mathis](https://discourse.psychopy.org/u/mathis)\
**Post date:** [June 26, 2017, 11:36am UTC](https://discourse.psychopy.org/t/continuously-exactly-1-frame-is-dropped-per-trial/2668/1 "2017-06-26T11:36:16Z")

</div>

Hi all,

I’m relatively new to psychopy (doing my first experiment for my bachelor’s thesis) and have come across a problem controlling stimulus presentation:

In my experiment’s procedure, I do present an image for 2 frames on a 75 hz CRT-monitor. This is directly followed by a set of three masks, that are also presented for 2 frames each. Next, there is a blank intervall randomly ranging between 90 and 120 frames.

Having seen the image, subjects should as quickly as possible decide whether they have seen an indoor- or an outdoor-scene by lifting a finger of one of the ctrl-keys, that are required to be held down.

Now here’s my problem (Code below): I set the win.recordFrameIntervals to True to obtain info about dropped frames. In order to see for every trial if frames were dropped, I set the recording to zero directly before starting with the presentation procedure, and save the number of dropped frames in a variable that is appended to my output. I alway get one dropped frame per trial, also with a second CRT-monitor I tested my experiment on. The computer has an external graphics card with drivers that are fully updated.

Code:

```auto
#Preload Images
images = [] # need to start with an empty list

filenames = expFile["filename"]
filenames_path = path_images + expFile["filename"]

for file in filenames_path: #create an image stimulus from each file, and store it in the list
    images.append(visual.ImageStim(win=win, image=file)) 

#function to present image and masks and capture RT of releasing a key
def presentImage(win,stimulus, maskPic1, maskPic2, maskPic3, fillerPic): 
    image = stimulus
        
    mask1 = maskPic1
        
    mask2 = maskPic2
        
    mask3 = maskPic3
        
    filler = fillerPic
        
    c = 0
    io.clearEvents() 

    for frameN in xrange(2): 
        image.draw()
        win.flip()
        if frameN == 0:
             t1 = core.getTime() #time at stimulus onset
    win.flip() 
    for frameN in xrange(2):
        mask1.draw()
        win.flip()
    win.flip()
    for frameN in xrange2):
        mask2.draw()
        win.flip()
    win.flip()
    for frameN in xrange(2):
        mask3.draw()
        win.flip()
    win.flip()
    waitTime = random.randint(90, 120)
    for frameN in xrange(waitTime):
        filler.draw()
        win.flip()
    win.flip()

    a = 0 #to only capture first release/reaction
    for event in keyboard_io.getReleases(keys=[target_key, distractor_key]):
        if a==0:
            c = event.time - t1 #difference in time between stimulus onset and key-release
            a += 1
        
    if c != 0:
        return (event.key, c)
    else:
        return (99, c)
#frame recording
win.recordFrameIntervals = True
win.refreshThreshold = 1/monitor_hz + 0.004

#do trials
for i in range(nTrials): #loop over all images
        #here, some stuff is done i don't want to bother you with, so I will just describe what is done
        #calling some functions: check if keys are held down, draw fixation cross
        #decide which masks are going to be used
        #now, the relevant part begins
        win.nDroppedFrames = 0 
        resp, RT = presentImage(win,dict2[stimList[i]], mask1, mask2, mask3, fillerPic) #save response and reaction time
        droppedFrames = win.nDroppedFrames

```

As mentioned before, my problem is that for every trial, one frame is recorded as dropped in the variable “droppedFrames”. I have no idea why that is and would naturally like to have no frames dropped.

Is there anybody with an idea what i could improve to controll the stimulus presentation in a way that no frames will be dropped?

Thank you in advance,  
Mathis

---

<div class="post-metadata">

**Author:** ![djmannion](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.psychopy.org/djmannion/32/37535_2.png) [@djmannion](https://discourse.psychopy.org/u/djmannion)\
**Post date:** [June 27, 2017, 6:49am UTC](https://discourse.psychopy.org/t/continuously-exactly-1-frame-is-dropped-per-trial/2668/2 "2017-06-27T06:49:43Z")

</div>

It could be due to the section of code that is removed here (i.e. the code at the start of each iteration of the trial loop). If that takes longer than a refresh, then the first flip in `presentImage` will register as dropped (though not on the first trial, unless there is another flip in the removed code). Maybe add a `print win.frameIntervals` statement to the end of each iteration to see if you can identify which frame it is?

---

<div class="post-metadata">

**Author:** ![mathis](https://avatars.discourse-cdn.com/v4/letter/m/278dde/32.png) [@mathis](https://discourse.psychopy.org/u/mathis)\
**Post date:** [June 29, 2017, 12:01pm UTC](https://discourse.psychopy.org/t/continuously-exactly-1-frame-is-dropped-per-trial/2668/3 "2017-06-29T12:01:54Z")

</div>

Thank you for your answer, I will try to identify the exact frame!
