﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Millisecond Forums » Millisecond Forums » Inquisit 5  » Random block selection with restrictions</title><generator>InstantForum 2017-1 Final</generator><description>Millisecond Forums</description><link>https://forums.millisecond.com/</link><webMaster>Millisecond Forums</webMaster><lastBuildDate>Tue, 29 Sep 2026 06:07:40 GMT</lastBuildDate><ttl>20</ttl><item><title>Random block selection with restrictions</title><link>https://forums.millisecond.com/Topic32416.aspx</link><description>Hi all&lt;br/&gt;My goal is to randomly select different blocks to be presented at certain moments in my experiment, but with a few restrictions on the order. &lt;br/&gt;I have basically four kind of blocks: neutral blocks (block.neutral), negative low arousing blocks (block.low), negative high arousing blocks (block.high) and blocks with attention checks (block.attentioncheck1). In the experiment, there should be in total: 4 neutral blocks, 2 negative low arousing blocks, 2 negative high arousing blocks and 3 attention check blocks. They should be randomly selected, but with the restriction that no lists of the same valence should be presented consecutively three times or more (so no 3 neutral blocks or 3 negative blocks after each other).&amp;nbsp;The difficulty is that negative blocks can be both low and high arousal, so you can't simply place restrictions on the repetition of block.low or block.high.&lt;br/&gt;&lt;br/&gt;I previously used:&lt;br/&gt;&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 = block.newwordgeneration;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-12 = noreplacenorepeat (block.neutral, block.neutral, block.neutral, block.neutral, block.low, block.low, block.high, block.high, block.attentioncheck1, block.attentioncheck1, block.attentioncheck1); &lt;br/&gt;...&lt;br/&gt;&lt;br/&gt;Is there another way to implement this? Thanks for your time!&lt;br/&gt;Kind regards&lt;br/&gt;Dora&lt;br/&gt;</description><pubDate>Wed, 03 Nov 2021 09:22:57 GMT</pubDate><dc:creator>dproost</dc:creator></item><item><title>RE: Random block selection with restrictions</title><link>https://forums.millisecond.com/Topic32439.aspx</link><description>&lt;blockquote data-id="32418" class="if-quote-wrapper" unselectable="on" data-guid="1635931352992" id="if_insertedNode_1635931351784" contenteditable="false"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="32418" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="32418" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="32418" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 11/2/2021&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-32418"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="32417" class="if-quote-wrapper" unselectable="on" data-guid="1635931352992" id="if_insertedNode_1635868281545" contenteditable="false"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="32417" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="32417" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="32417" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 11/2/2021&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-32417"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="32416" class="if-quote-wrapper" unselectable="on" data-guid="1635931352992" id="if_insertedNode_1635865859302" contenteditable="false"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="32416" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="32416" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="32416" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;dproost - 11/2/2021&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-32416"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;Hi all&lt;br/&gt;My goal is to randomly select different blocks to be presented at certain moments in my experiment, but with a few restrictions on the order. &lt;br/&gt;I have basically four kind of blocks: neutral blocks (block.neutral), negative low arousing blocks (block.low), negative high arousing blocks (block.high) and blocks with attention checks (block.attentioncheck1). In the experiment, there should be in total: 4 neutral blocks, 2 negative low arousing blocks, 2 negative high arousing blocks and 3 attention check blocks. They should be randomly selected, but with the restriction that no lists of the same valence should be presented consecutively three times or more (so no 3 neutral blocks or 3 negative blocks after each other).&amp;nbsp;The difficulty is that negative blocks can be both low and high arousal, so you can't simply place restrictions on the repetition of block.low or block.high.&lt;br/&gt;&lt;br/&gt;I previously used:&lt;br/&gt;&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 = block.newwordgeneration;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-12 = noreplacenorepeat (block.neutral, block.neutral, block.neutral, block.neutral, block.low, block.low, block.high, block.high, block.attentioncheck1, block.attentioncheck1, block.attentioncheck1); &lt;br/&gt;...&lt;br/&gt;&lt;br/&gt;Is there another way to implement this? Thanks for your time!&lt;br/&gt;Kind regards&lt;br/&gt;Dora&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="32416"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;[code]&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [1-11 = list.blocklist]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list blocklist&amp;gt;&lt;br/&gt;/ items = (block.neutral, block.neutral, block.neutral, block.neutral,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.negative, block.negative, block.negative, block.negative,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.attentioncheck, block.attentioncheck, block.attentioncheck)&lt;br/&gt;/ maxrunsize = 3&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block neutral&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;// dummy block&lt;br/&gt;&amp;lt;block negative&amp;gt;&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.negativeblocks.nextvalue;&lt;br/&gt;]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list negativeblocks&amp;gt;&lt;br/&gt;/ items = (block.low, block.low, block.high, block.high)&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block low&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block high&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block attentioncheck&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=mytext]&lt;br/&gt;/ validresponse = (0)&lt;br/&gt;/ trialduration = 2000&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text mytext&amp;gt;&lt;br/&gt;/ items = ("block.&amp;lt;%script.currentblock%&amp;gt;")&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;[/code]&lt;br/&gt;&lt;br/&gt;This will obviously not prevent multiple attention check blocks in a row. Worst case is all three occurring in a row, as permitted with /maxrunsize = 3.&lt;a class="if-quote-goto quote-link" href="#" data-id="32417"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;For anything more complex, just code a simple sequence generator that generates a conforming block sequence up-front.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [1= generateSequence; 2-12 = runSequence]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block generateSequence&amp;gt;&lt;br/&gt;/ trials = [1=gen]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;/ sequence = ""&lt;br/&gt;/ nextblock = ""&lt;br/&gt;/ blockcount = 0&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;// "0" = neutral&lt;br/&gt;// "1" = negative (without regard to hi/lo)&lt;br/&gt;// "A" = attention check&lt;br/&gt;&amp;lt;list blocktypelist&amp;gt;&lt;br/&gt;/ items = ("0", "0", "0", "0",&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"1", "1", "1", "1",&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"A", "A", "A")&lt;br/&gt;/ maxrunsize = 3&lt;br/&gt;/ selectionrate = always&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list generatedblocksequence&amp;gt;&lt;br/&gt;/ selectionmode = sequence&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial gen&amp;gt;&lt;br/&gt;/ ontrialbegin = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = "";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.blocktypelist.reset();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.reset();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;]&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (startswith(values.sequence, "A") || contains(values.sequence, "AA") || contains(values.sequence, "1111") || contains(values.sequence, "0000")) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trial.gen;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;]&lt;br/&gt;/ validresponse = (0)&lt;br/&gt;/ trialduration = 0&lt;br/&gt;/ recorddata = false&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block runSequence&amp;gt;&lt;br/&gt;/ onblockbegin = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.nextblock = list.generatedblocksequence.nextvalue;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.blockcount += 1;&lt;br/&gt;]&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (values.nextblock == "0"){&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.neutral;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (values.nextblock == "1") {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.negative;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.attentioncheck;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block neutral&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;// dummy block&lt;br/&gt;&amp;lt;block negative&amp;gt;&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.negativeblocks.nextvalue;&lt;br/&gt;]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list negativeblocks&amp;gt;&lt;br/&gt;/ items = (block.low, block.low, block.high, block.high)&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block low&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block high&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block attentioncheck&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=mytext]&lt;br/&gt;/ validresponse = (0)&lt;br/&gt;/ trialduration = 1000&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text mytext&amp;gt;&lt;br/&gt;/ items = ("block.&amp;lt;%script.currentblock%&amp;gt;")&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;data&amp;gt;&lt;br/&gt;/ columns = (date time subject group values.blockcount blockcode trialnum trialcode values.sequence)&lt;br/&gt;/ separatefiles = true&lt;br/&gt;&amp;lt;/data&amp;gt;&lt;br/&gt;[/code]&lt;br/&gt;&lt;br/&gt;The above will ensure that:&lt;br/&gt;- The sequence does not start with an attention check block.&lt;br/&gt;- There are no consecutive attention check blocks in the sequence.&lt;br/&gt;- There are no more than three negative (regardless of hi/lo) blocks in a row.&lt;br/&gt;- There are no more than three neutral blocks in a row.&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="32418"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;Thanks a lot for your extensive answer! It works now!</description><pubDate>Wed, 03 Nov 2021 09:22:57 GMT</pubDate><dc:creator>dproost</dc:creator></item><item><title>RE: Random block selection with restrictions</title><link>https://forums.millisecond.com/Topic32418.aspx</link><description>&lt;blockquote data-id="32417" class="if-quote-wrapper" unselectable="on" data-guid="1635868282624" id="if_insertedNode_1635868281545" contenteditable="false"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="32417" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="32417" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="32417" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;Dave - 11/2/2021&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-32417"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;&lt;blockquote data-id="32416" class="if-quote-wrapper" unselectable="on" data-guid="1635868282624" id="if_insertedNode_1635865859302" contenteditable="false"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="32416" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="32416" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="32416" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;dproost - 11/2/2021&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-32416"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;Hi all&lt;br/&gt;My goal is to randomly select different blocks to be presented at certain moments in my experiment, but with a few restrictions on the order. &lt;br/&gt;I have basically four kind of blocks: neutral blocks (block.neutral), negative low arousing blocks (block.low), negative high arousing blocks (block.high) and blocks with attention checks (block.attentioncheck1). In the experiment, there should be in total: 4 neutral blocks, 2 negative low arousing blocks, 2 negative high arousing blocks and 3 attention check blocks. They should be randomly selected, but with the restriction that no lists of the same valence should be presented consecutively three times or more (so no 3 neutral blocks or 3 negative blocks after each other).&amp;nbsp;The difficulty is that negative blocks can be both low and high arousal, so you can't simply place restrictions on the repetition of block.low or block.high.&lt;br/&gt;&lt;br/&gt;I previously used:&lt;br/&gt;&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 = block.newwordgeneration;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-12 = noreplacenorepeat (block.neutral, block.neutral, block.neutral, block.neutral, block.low, block.low, block.high, block.high, block.attentioncheck1, block.attentioncheck1, block.attentioncheck1); &lt;br/&gt;...&lt;br/&gt;&lt;br/&gt;Is there another way to implement this? Thanks for your time!&lt;br/&gt;Kind regards&lt;br/&gt;Dora&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="32416"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;[code]&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [1-11 = list.blocklist]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list blocklist&amp;gt;&lt;br/&gt;/ items = (block.neutral, block.neutral, block.neutral, block.neutral,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.negative, block.negative, block.negative, block.negative,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.attentioncheck, block.attentioncheck, block.attentioncheck)&lt;br/&gt;/ maxrunsize = 3&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block neutral&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;// dummy block&lt;br/&gt;&amp;lt;block negative&amp;gt;&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.negativeblocks.nextvalue;&lt;br/&gt;]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list negativeblocks&amp;gt;&lt;br/&gt;/ items = (block.low, block.low, block.high, block.high)&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block low&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block high&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block attentioncheck&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=mytext]&lt;br/&gt;/ validresponse = (0)&lt;br/&gt;/ trialduration = 2000&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text mytext&amp;gt;&lt;br/&gt;/ items = ("block.&amp;lt;%script.currentblock%&amp;gt;")&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;[/code]&lt;br/&gt;&lt;br/&gt;This will obviously not prevent multiple attention check blocks in a row. Worst case is all three occurring in a row, as permitted with /maxrunsize = 3.&lt;a class="if-quote-goto quote-link" href="#" data-id="32417"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;For anything more complex, just code a simple sequence generator that generates a conforming block sequence up-front.&lt;br/&gt;&lt;br/&gt;[code]&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [1= generateSequence; 2-12 = runSequence]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block generateSequence&amp;gt;&lt;br/&gt;/ trials = [1=gen]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;values&amp;gt;&lt;br/&gt;/ sequence = ""&lt;br/&gt;/ nextblock = ""&lt;br/&gt;/ blockcount = 0&lt;br/&gt;&amp;lt;/values&amp;gt;&lt;br/&gt;&lt;br/&gt;// "0" = neutral&lt;br/&gt;// "1" = negative (without regard to hi/lo)&lt;br/&gt;// "A" = attention check&lt;br/&gt;&amp;lt;list blocktypelist&amp;gt;&lt;br/&gt;/ items = ("0", "0", "0", "0",&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"1", "1", "1", "1",&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"A", "A", "A")&lt;br/&gt;/ maxrunsize = 3&lt;br/&gt;/ selectionrate = always&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list generatedblocksequence&amp;gt;&lt;br/&gt;/ selectionmode = sequence&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial gen&amp;gt;&lt;br/&gt;/ ontrialbegin = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = "";&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.blocktypelist.reset();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.reset();&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.sequence = concat(values.sequence, list.blocktypelist.nextvalue);&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.generatedblocksequence.appenditem(list.blocktypelist.currentvalue);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br/&gt;]&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (startswith(values.sequence, "A") || contains(values.sequence, "AA") || contains(values.sequence, "1111") || contains(values.sequence, "0000")) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trial.gen;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;]&lt;br/&gt;/ validresponse = (0)&lt;br/&gt;/ trialduration = 0&lt;br/&gt;/ recorddata = false&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block runSequence&amp;gt;&lt;br/&gt;/ onblockbegin = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.nextblock = list.generatedblocksequence.nextvalue;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values.blockcount += 1;&lt;br/&gt;]&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (values.nextblock == "0"){&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.neutral;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if (values.nextblock == "1") {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.negative;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.attentioncheck;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br/&gt;]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block neutral&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;// dummy block&lt;br/&gt;&amp;lt;block negative&amp;gt;&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.negativeblocks.nextvalue;&lt;br/&gt;]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list negativeblocks&amp;gt;&lt;br/&gt;/ items = (block.low, block.low, block.high, block.high)&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block low&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block high&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block attentioncheck&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=mytext]&lt;br/&gt;/ validresponse = (0)&lt;br/&gt;/ trialduration = 1000&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text mytext&amp;gt;&lt;br/&gt;/ items = ("block.&amp;lt;%script.currentblock%&amp;gt;")&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;data&amp;gt;&lt;br/&gt;/ columns = (date time subject group values.blockcount blockcode trialnum trialcode values.sequence)&lt;br/&gt;/ separatefiles = true&lt;br/&gt;&amp;lt;/data&amp;gt;&lt;br/&gt;[/code]&lt;br/&gt;&lt;br/&gt;The above will ensure that:&lt;br/&gt;- The sequence does not start with an attention check block.&lt;br/&gt;- There are no consecutive attention check blocks in the sequence.&lt;br/&gt;- There are no more than three negative (regardless of hi/lo) blocks in a row.&lt;br/&gt;- There are no more than three neutral blocks in a row.&lt;br/&gt;</description><pubDate>Tue, 02 Nov 2021 15:54:40 GMT</pubDate><dc:creator>Dave</dc:creator></item><item><title>RE: Random block selection with restrictions</title><link>https://forums.millisecond.com/Topic32417.aspx</link><description>&lt;blockquote data-id="32416" class="if-quote-wrapper" unselectable="on" data-guid="1635865859813" id="if_insertedNode_1635865859302" contenteditable="false"&gt;&lt;a class="quote-para" unselectable="on" style="display: none;" href="#" data-id="32416" title="Move Cursor Below" contenteditable="false"&gt;&lt;span unselectable="on"&gt;+&lt;/span&gt;&lt;/a&gt;&lt;a class="quote-delete" unselectable="on" style="display: none;" href="#" data-id="32416" title="Delete Quote" contenteditable="false"&gt;&lt;span unselectable="on"&gt;x&lt;/span&gt;&lt;/a&gt;&lt;span unselectable="on" class="quote-markup"&gt;[quote]&lt;/span&gt;&lt;div unselectable="on" class="if-quote-header" contenteditable="false"&gt;&lt;div unselectable="on" class="if-quote-toggle-wrapper"&gt;&lt;a class="if-quote-toggle quote-link" href="#" data-id="32416" title=" "&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[b]&lt;/span&gt;dproost - 11/2/2021&lt;span unselectable="on" class="quote-markup"&gt;[/b]&lt;/span&gt;&lt;/div&gt;&lt;div class="if-quote-message if-quote-message-32416"&gt;&lt;div class="if-quote-message-margin" contenteditable="true"&gt;Hi all&lt;br/&gt;My goal is to randomly select different blocks to be presented at certain moments in my experiment, but with a few restrictions on the order. &lt;br/&gt;I have basically four kind of blocks: neutral blocks (block.neutral), negative low arousing blocks (block.low), negative high arousing blocks (block.high) and blocks with attention checks (block.attentioncheck1). In the experiment, there should be in total: 4 neutral blocks, 2 negative low arousing blocks, 2 negative high arousing blocks and 3 attention check blocks. They should be randomly selected, but with the restriction that no lists of the same valence should be presented consecutively three times or more (so no 3 neutral blocks or 3 negative blocks after each other).&amp;nbsp;The difficulty is that negative blocks can be both low and high arousal, so you can't simply place restrictions on the repetition of block.low or block.high.&lt;br/&gt;&lt;br/&gt;I previously used:&lt;br/&gt;&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 = block.newwordgeneration;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-12 = noreplacenorepeat (block.neutral, block.neutral, block.neutral, block.neutral, block.low, block.low, block.high, block.high, block.attentioncheck1, block.attentioncheck1, block.attentioncheck1); &lt;br/&gt;...&lt;br/&gt;&lt;br/&gt;Is there another way to implement this? Thanks for your time!&lt;br/&gt;Kind regards&lt;br/&gt;Dora&lt;br/&gt;&lt;a class="if-quote-goto quote-link" href="#" data-id="32416"&gt;&lt;span class="goto"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span unselectable="on" class="quote-markup"&gt;[/quote]&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;[code]&amp;lt;expt&amp;gt;&lt;br/&gt;/ blocks = [1-11 = list.blocklist]&lt;br/&gt;&amp;lt;/expt&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list blocklist&amp;gt;&lt;br/&gt;/ items = (block.neutral, block.neutral, block.neutral, block.neutral,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.negative, block.negative, block.negative, block.negative,&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block.attentioncheck, block.attentioncheck, block.attentioncheck)&lt;br/&gt;/ maxrunsize = 3&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block neutral&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;// dummy block&lt;br/&gt;&amp;lt;block negative&amp;gt;&lt;br/&gt;/ branch = [&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.negativeblocks.nextvalue;&lt;br/&gt;]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;list negativeblocks&amp;gt;&lt;br/&gt;/ items = (block.low, block.low, block.high, block.high)&lt;br/&gt;&amp;lt;/list&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block low&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block high&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;block attentioncheck&amp;gt;&lt;br/&gt;/ trials = [1=mytrial]&lt;br/&gt;&amp;lt;/block&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;trial mytrial&amp;gt;&lt;br/&gt;/ stimulusframes = [1=mytext]&lt;br/&gt;/ validresponse = (0)&lt;br/&gt;/ trialduration = 2000&lt;br/&gt;&amp;lt;/trial&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;text mytext&amp;gt;&lt;br/&gt;/ items = ("block.&amp;lt;%script.currentblock%&amp;gt;")&lt;br/&gt;&amp;lt;/text&amp;gt;&lt;br/&gt;[/code]&lt;br/&gt;&lt;br/&gt;This will obviously not prevent multiple attention check blocks in a row. Worst case is all three occurring in a row, as permitted with /maxrunsize = 3.</description><pubDate>Tue, 02 Nov 2021 15:12:23 GMT</pubDate><dc:creator>Dave</dc:creator></item></channel></rss>