Deployed fb2ad41 with MkDocs version: 1.1.2

This commit is contained in:
Becky Gilbert 2021-04-11 10:20:50 -08:00
parent 98b106a869
commit 964db3cded
8 changed files with 345 additions and 110 deletions

View File

@ -1299,6 +1299,20 @@
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#start" class="md-nav__link">
start()
</a>
</li>
<li class="md-nav__item">
<a href="#isinitialized" class="md-nav__link">
isInitialized()
</a>
</li>
<li class="md-nav__item">
<a href="#facedetected" class="md-nav__link">
faceDetected()
@ -1346,6 +1360,13 @@
pause()
</a>
</li>
<li class="md-nav__item">
<a href="#resetcalibration" class="md-nav__link">
resetCalibration()
</a>
</li>
<li class="md-nav__item">
@ -1381,6 +1402,27 @@
getCurrentPrediction()
</a>
</li>
<li class="md-nav__item">
<a href="#startsampleintervalinterval" class="md-nav__link">
startSampleInterval(interval)
</a>
</li>
<li class="md-nav__item">
<a href="#stopsampleinterval" class="md-nav__link">
stopSampleInterval()
</a>
</li>
<li class="md-nav__item">
<a href="#ongazeupdatecallback" class="md-nav__link">
onGazeUpdate(callback)
</a>
</li>
</ul>
@ -1538,6 +1580,20 @@
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#start" class="md-nav__link">
start()
</a>
</li>
<li class="md-nav__item">
<a href="#isinitialized" class="md-nav__link">
isInitialized()
</a>
</li>
<li class="md-nav__item">
<a href="#facedetected" class="md-nav__link">
faceDetected()
@ -1585,6 +1641,13 @@
pause()
</a>
</li>
<li class="md-nav__item">
<a href="#resetcalibration" class="md-nav__link">
resetCalibration()
</a>
</li>
<li class="md-nav__item">
@ -1620,6 +1683,27 @@
getCurrentPrediction()
</a>
</li>
<li class="md-nav__item">
<a href="#startsampleintervalinterval" class="md-nav__link">
startSampleInterval(interval)
</a>
</li>
<li class="md-nav__item">
<a href="#stopsampleinterval" class="md-nav__link">
stopSampleInterval()
</a>
</li>
<li class="md-nav__item">
<a href="#ongazeupdatecallback" class="md-nav__link">
onGazeUpdate(callback)
</a>
</li>
</ul>
@ -1672,11 +1756,23 @@
<td>You can explicitly pass a reference to a loaded instance of the webgazer.js library. If no explicit reference is passed then the extension will look for a global <code>webgazer</code> object. If you are loading webgazer.js via a <code>&lt;script&gt;</code> tag you do not need to set this parameter in most circumstances.</td>
</tr>
<tr>
<td>auto_initialize</td>
<td>bool</td>
<td>false</td>
<td>Whether to automatically initialize webgazer when the experiment begins. If set to <code>true</code> then the experiment will attempt to access the user's webcam immediately upon page load. The default value is <code>false</code> because it is probably a good idea to explain to the user why camera permission will be needed before asking for it. The <code>webgazer-init-camera</code> plugin can be used to initialize the camera during the experiment.</td>
</tr>
<tr>
<td>round_predictions</td>
<td>bool</td>
<td>true</td>
<td>Whether to round the <code>x</code>,<code>y</code> coordinates predicted by WebGazer to the nearest whole number. This <em>greatly</em> reduces the size of the data, as WebGazer records data to 15 decimal places by default. Given the noise of the system, there's really no need to record data to this level of precision.</td>
</tr>
<tr>
<td>sampling_interval</td>
<td>numeric</td>
<td>34</td>
<td>Sets the interval between gaze predictions. Because the underlying code is partially asynchronous, this interval is only approximate. The sampling interval will not be faster than this, on average, but the time between samples may fluctuate. Setting the interval too fast will create performance problems and produce redundant data, as the video feed from most webcams only updates about 30 times per second.</td>
</tr>
</tbody>
</table>
<h3 id="trial-parameters">Trial Parameters<a class="headerlink" href="#trial-parameters" title="Permanent link">&para;</a></h3>
@ -1723,13 +1819,17 @@
</tr>
<tr>
<td>webgazer_targets</td>
<td>array</td>
<td>An array of objects contain the pixel coordinates of elements on the screen specified by the <code>.targets</code> parameter. Each object contains a <code>selector</code> property, containing the CSS selector string used to find the element, plus <code>top</code>, <code>bottom</code>, <code>left</code>, and <code>right</code> parameters which specify the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect">bounding rectangle</a> of the element.</td>
<td>object</td>
<td>An object contain the pixel coordinates of elements on the screen specified by the <code>.targets</code> parameter. Each key in this object will be a <code>selector</code> property, containing the CSS selector string used to find the element. The object corresponding to each key will contain <code>x</code> and <code>y</code> properties specifying the top-left corner of the object, <code>width</code> and <code>height</code> values, plus <code>top</code>, <code>bottom</code>, <code>left</code>, and <code>right</code> parameters which specify the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect">bounding rectangle</a> of the element.</td>
</tr>
</tbody>
</table>
<h2 id="functions">Functions<a class="headerlink" href="#functions" title="Permanent link">&para;</a></h2>
<p>In addition to the jsPsych webgazer-* plugins, the jsPsych webgazer extension provides a set of functions that allow the researcher to interact more directly with WebGazer. These functions can be called at any point during an experiment, and are crucial for building trial plugins that interact with WebGazer. All of the functions below must be prefixed with <code>jsPsych.extensions.webgazer</code> (e.g. <code>jsPsych.extensions.webgazer.faceDetected()</code>).</p>
<h3 id="start">start()<a class="headerlink" href="#start" title="Permanent link">&para;</a></h3>
<p>Performs initialization of webgazer, including requesting permissions from the user to access the camera. Returns a <code>Promise</code> that resolves when the camera is initialized and fails if the camera cannot be accessed, e.g., because the user denies permission. This is handled automatically if using the <code>webgazer-init-camera</code> plugin or setting <code>auto_initialize</code> to <code>true</code> in the extension parameters.</p>
<h3 id="isinitialized">isInitialized()<a class="headerlink" href="#isinitialized" title="Permanent link">&para;</a></h3>
<p>Returns <code>true</code> if <code>start()</code> has been successfully called at some point, and <code>false</code> otherwise.</p>
<h3 id="facedetected">faceDetected()<a class="headerlink" href="#facedetected" title="Permanent link">&para;</a></h3>
<p>Returns <code>true</code> if WebGazer is ready to make predictions (<code>webgazer.getTracker().predictionReady</code> is <code>true</code>).</p>
<h3 id="showpredictions">showPredictions()<a class="headerlink" href="#showpredictions" title="Permanent link">&para;</a></h3>
@ -1744,6 +1844,8 @@
<p>Turns on gaze prediction. The extension will automatically handle this for you in most cases. You probably only need to use this if you are writing your own plugin that interfaces directly with WebGazer.</p>
<h3 id="pause">pause()<a class="headerlink" href="#pause" title="Permanent link">&para;</a></h3>
<p>Turns off gaze prediction. The extension will automatically handle this for you in most cases. You probably only need to use this if you are writing your own plugin that interfaces directly with WebGazer.</p>
<h3 id="resetcalibration">resetCalibration()<a class="headerlink" href="#resetcalibration" title="Permanent link">&para;</a></h3>
<p>Clears all calibration data.</p>
<h3 id="startmousecalibration">startMouseCalibration()<a class="headerlink" href="#startmousecalibration" title="Permanent link">&para;</a></h3>
<p>Turns on mouse movement and mouse clicks as calibration events. While the <code>webgazer-calibration</code> plugin can also be used to run a parmeterized calibration routine, this calibration function call allows you to continuously calibrate WebGazer to any mouse movements or clicks throughout the experiment. For example, any *-button-response trial would also function as a WebGazer calibration event. </p>
<h3 id="stopmousecalibration">stopMouseCalibration()<a class="headerlink" href="#stopmousecalibration" title="Permanent link">&para;</a></h3>
@ -1754,11 +1856,21 @@
<p>Change the method that WebGazer is using to perform feature -&gt; location regression. Valid options are <code>ridge</code>, <code>weightedRidge</code>, and <code>threadedRidge</code>. See the WebGazer docs for more information about these options.
The extension uses the default mode specified by WebGazer (currently <code>ridge</code>).</p>
<h3 id="getcurrentprediction">getCurrentPrediction()<a class="headerlink" href="#getcurrentprediction" title="Permanent link">&para;</a></h3>
<p>Get the current predicted gaze location from WebGazer. Returns an object with <code>x</code>, <code>y</code>, and <code>eyeFeature</code> properties. This function is asynchronus, so proper use requires either the <code>await</code> keyword in the context of another <code>async function</code> or using <code>.then()</code>. </p>
<div class="highlight"><pre><span></span><code><span class="nx">jsPsych</span><span class="p">.</span><span class="nx">extensions</span><span class="p">.</span><span class="nx">webgazer</span><span class="p">.</span><span class="nx">getCurrentPrediction</span><span class="p">().</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">data</span><span class="p">){</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`Currently looking at coordinate </span><span class="si">${</span><span class="nx">data</span><span class="p">.</span><span class="nx">x</span><span class="si">}</span><span class="sb">, </span><span class="si">${</span><span class="nx">data</span><span class="p">.</span><span class="nx">y</span><span class="si">}</span><span class="sb">`</span><span class="p">)</span>
<p>Get the current predicted gaze location from WebGazer. This returns a Promise that resolves once WebGazer has finished computing the gaze prediction. The Promise has a single parameter with an object with <code>x</code>, <code>y</code>, and, <code>t</code> parameters. <code>t</code> will be the value of <code>performance.now()</code> at approximately the time that the video frame was recorded. </p>
<h3 id="startsampleintervalinterval">startSampleInterval(interval)<a class="headerlink" href="#startsampleintervalinterval" title="Permanent link">&para;</a></h3>
<p>Starts sampling gaze predictions every <code>interval</code> milliseconds. If <code>interval</code> is left undefined then the default value at extension initialization is used. Every sample will trigger an <code>onGazeUpdate</code> callback, as well as side effects that result in data storage within the extension.</p>
<h3 id="stopsampleinterval">stopSampleInterval()<a class="headerlink" href="#stopsampleinterval" title="Permanent link">&para;</a></h3>
<p>Stops the sampling started by <code>startSampleInterval()</code>.</p>
<h3 id="ongazeupdatecallback">onGazeUpdate(callback)<a class="headerlink" href="#ongazeupdatecallback" title="Permanent link">&para;</a></h3>
<p>Subscribe to gaze updates. The <code>callback</code> will be invoked every time a new gaze prediction is generated. The first argument of the <code>callback</code> will be an object with <code>x</code>, <code>y</code>, and, if currently in a trial with the extension turned on, the time <code>t</code> in ms since the start of the trial. <code>t</code> will be the value of <code>performance.now()</code> at approximately the time that the video frame was recorded. If currently in an active trial then <code>t</code> will be relative to the start of the trial.</p>
<p>This function returns a close handler. When you no longer need to subscribe to gaze updates, call the close handler. Example:</p>
<div class="highlight"><pre><span></span><code><span class="kd">var</span> <span class="nx">cancelGazeUpdateHandler</span> <span class="o">=</span> <span class="nx">jsPsych</span><span class="p">.</span><span class="nx">extensions</span><span class="p">.</span><span class="nx">webgazer</span><span class="p">.</span><span class="nx">onGazeUpdate</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">prediction</span><span class="p">){</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`Currently looking at </span><span class="si">${</span><span class="nx">prediction</span><span class="p">.</span><span class="nx">x</span><span class="si">}</span><span class="sb">, </span><span class="si">${</span><span class="nx">prediction</span><span class="p">.</span><span class="nx">y</span><span class="si">}</span><span class="sb">`</span><span class="p">);</span>
<span class="p">});</span>
<span class="nx">cancelGazeUpdateHandler</span><span class="p">();</span>
</code></pre></div>
<p>You can add multiple handlers. Handlers are not closed automatically, so be sure to cancel them when no longer needed.</p>

View File

@ -455,6 +455,54 @@
Getting Started
</a>
<nav class="md-nav" aria-label="Getting Started">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#load-webgazerjs" class="md-nav__link">
Load webgazer.js
</a>
</li>
<li class="md-nav__item">
<a href="#load-the-jspsych-webgazer-extension" class="md-nav__link">
Load the jsPsych webgazer extension
</a>
</li>
<li class="md-nav__item">
<a href="#initialize-the-camera" class="md-nav__link">
Initialize the camera
</a>
</li>
<li class="md-nav__item">
<a href="#calibration" class="md-nav__link">
Calibration
</a>
</li>
<li class="md-nav__item">
<a href="#validation" class="md-nav__link">
Validation
</a>
</li>
<li class="md-nav__item">
<a href="#adding-eye-tracking-to-a-trial" class="md-nav__link">
Adding eye tracking to a trial
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1391,6 +1439,54 @@
Getting Started
</a>
<nav class="md-nav" aria-label="Getting Started">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#load-webgazerjs" class="md-nav__link">
Load webgazer.js
</a>
</li>
<li class="md-nav__item">
<a href="#load-the-jspsych-webgazer-extension" class="md-nav__link">
Load the jsPsych webgazer extension
</a>
</li>
<li class="md-nav__item">
<a href="#initialize-the-camera" class="md-nav__link">
Initialize the camera
</a>
</li>
<li class="md-nav__item">
<a href="#calibration" class="md-nav__link">
Calibration
</a>
</li>
<li class="md-nav__item">
<a href="#validation" class="md-nav__link">
Validation
</a>
</li>
<li class="md-nav__item">
<a href="#adding-eye-tracking-to-a-trial" class="md-nav__link">
Adding eye tracking to a trial
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1427,17 +1523,23 @@
<h1 id="eye-tracking">Eye Tracking<a class="headerlink" href="#eye-tracking" title="Permanent link">&para;</a></h1>
<p>jsPsych supports eye tracking through the <a href="https://webgazer.cs.brown.edu/">WebGazer</a> library. WebGazer uses computer vision techniques to identify features of the participant's eyes via a webcam and predicts gaze location. The system is calibrated by having the participant click on or look at known locations on the screen. These locations are linked to eye features. Gaze location is predicted using regression.</p>
<h2 id="getting-started">Getting Started<a class="headerlink" href="#getting-started" title="Permanent link">&para;</a></h2>
<p>First, <a href="https://webgazer.cs.brown.edu/#download">download WebGazer.js </a> and include it in your experiment file via a <code>&lt;script&gt;</code> tag. You'll also need to include jsPsych's <a href="../../extensions/jspsych-ext-webgazer/">webgazer extension</a>.</p>
<h3 id="load-webgazerjs">Load webgazer.js<a class="headerlink" href="#load-webgazerjs" title="Permanent link">&para;</a></h3>
<p>The <a href="https://webgazer.cs.brown.edu/#download">official version of WebGazer</a> is currently <strong>not</strong> supported by jsPsych. Our <a href="https://github.com/jspsych/WebGazer">fork of the library</a> contains some minor improvements aimed at the kind of experiments that jsPsych is typically used for, e.g., situations in which the timing of display screens needs to be accurate. </p>
<p>A copy of our fork is included in the jsPsych release, in the <code>/examples/js/webgazer</code> folder. You will need to copy this folder into your project directory. This guide will assume that the folder is located at <code>/js/webgazer</code>, but you can change the path as you'd like. </p>
<p>Include the <code>webgazer.js</code> file in your experiment via a <code>&lt;script&gt;</code> tag. </p>
<div class="highlight"><pre><span></span><code><span class="p">&lt;</span><span class="nt">head</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;jspsych/jspsych.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;js/webgazer/webgazer.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
</code></pre></div>
<h3 id="load-the-jspsych-webgazer-extension">Load the jsPsych webgazer extension<a class="headerlink" href="#load-the-jspsych-webgazer-extension" title="Permanent link">&para;</a></h3>
<p>The <a href="/extensions/jspsych-ext-webgazer.md">webgazer extension</a> adds functionality to jsPsych for interacting with webgazer. Load it like you would a plugin file.</p>
<div class="highlight"><pre><span></span><code><span class="p">&lt;</span><span class="nt">head</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;jspsych/jspsych.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;webgazer.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;jspsych/extensions/jspsych-ext-webgazer.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
</code></pre></div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>An example experiment using WebGazer is available in the <strong>/examples</strong> folder of the jsPsych release. See <code>webgazer.html</code>.</p>
</div>
<p>To use the WebGazer extension in an experiment, include it in the list of extensions passed to <code>jsPsych.init()</code></p>
<div class="highlight"><pre><span></span><code><span class="nx">jsPsych</span><span class="p">.</span><span class="nx">init</span><span class="p">({</span>
<span class="nx">timeline</span><span class="o">:</span> <span class="p">[...],</span>
@ -1446,12 +1548,18 @@
<span class="p">]</span>
<span class="p">})</span>
</code></pre></div>
<p>To help the participant position their face correctly for eye tracking you can use the <a href="../../plugins/jspsych-webgazer-init-camera/">jspsych-webgazer-init-camera plugin</a>. This will show the participant what the camera sees, including facial feature landmarks, and prevent the participant from continuing until their face is in good position for eye tracking.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Example experiments using WebGazer are available in the <strong>/examples</strong> folder of the jsPsych release. See <code>webgazer.html</code>, <code>webgazer_image.html</code>, and <code>webgazer_audio.html</code>.</p>
</div>
<h3 id="initialize-the-camera">Initialize the camera<a class="headerlink" href="#initialize-the-camera" title="Permanent link">&para;</a></h3>
<p>To help the participant position their face correctly for eye tracking you can use the <a href="/plugins/jspsych-webgazer-init-camera.ms">jspsych-webgazer-init-camera plugin</a>. This will show the participant what the camera sees, including facial feature landmarks, and prevent the participant from continuing until their face is in good position for eye tracking. This plugin will also trigger the experiment to request permission to access the user's webcam if it hasn't already been granted.</p>
<div class="highlight"><pre><span></span><code><span class="kd">var</span> <span class="nx">init_camera_trial</span> <span class="o">=</span> <span class="p">{</span>
<span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;webgazer-init-camera&#39;</span>
<span class="p">}</span>
</code></pre></div>
<p>To calibrate WebGazer, you can use the <a href="../../plugins/jspsych-webgazer-calibrate/">jspsych-webgazer-calibrate plugin</a>. This plugin allows you to specify a set of points on the screen for calibration and to choose the method for calibrating -- either clicking on each point or simply fixating on each point. The location of calibration points is specified in percentages, e.g., <code>[25,50]</code> will result in a point that is 25% of the width of the screen from the left edge and 50% of the height of the screen from the top edge. Options for controlling other details of the calibration are explained in the <a href="../../plugins/jspsych-webgazer-calibrate/">documentation for the plugin</a>.</p>
<h3 id="calibration">Calibration<a class="headerlink" href="#calibration" title="Permanent link">&para;</a></h3>
<p>To calibrate WebGazer, you can use the <a href="/plugins/jspsych-webgazer-calibrate.md">jspsych-webgazer-calibrate plugin</a>. This plugin allows you to specify a set of points on the screen for calibration and to choose the method for calibrating -- either clicking on each point or simply fixating on each point. The location of calibration points is specified in percentages, e.g., <code>[25,50]</code> will result in a point that is 25% of the width of the screen from the left edge and 50% of the height of the screen from the top edge. Options for controlling other details of the calibration are explained in the <a href="/plugins/jspsych-webgazer-calibrate.md">documentation for the plugin</a>.</p>
<p>Note that instructions are not included in the calibration plugin, so you'll likely want to use a different plugin (e.g., <code>html-button-response</code>) to display instructions prior to running the calibration. </p>
<div class="highlight"><pre><span></span><code><span class="kd">var</span> <span class="nx">calibration_trial</span> <span class="o">=</span> <span class="p">{</span>
<span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;webgazer-calibrate&#39;</span><span class="p">,</span>
@ -1459,7 +1567,8 @@
<span class="nx">calibration_mode</span><span class="o">:</span> <span class="s1">&#39;click&#39;</span>
<span class="p">}</span>
</code></pre></div>
<p>To measure the accuracy and precision of the calibration, you can use the <a href="../../plugins/jspsych-webgazer-validate/">jspsych-webgazer-vaidate plugin</a>. Like the calibration plugin, you can specify a list of points to perform validation on. Here you can specify the points as either percentages or in terms of the distance from the center of the screen in pixels. Which mode you use will probably depend on how you are defining your stimuli throughout the experiment. You can also specify the radius of tolerance around each point, and the plugin will calculate the percentage of measured gaze samples within that radius. This is a potentially useful heuristic for deciding whether or not to calibrate again. Options for controlling other details of the validation are explained in the <a href="../../plugins/jspsych-webgazer-validate/">documentation for the plugin</a>.</p>
<h3 id="validation">Validation<a class="headerlink" href="#validation" title="Permanent link">&para;</a></h3>
<p>To measure the accuracy and precision of the calibration, you can use the <a href="/plugins/jspsych-webgazer-validate.md">jspsych-webgazer-vaidate plugin</a>. Like the calibration plugin, you can specify a list of points to perform validation on. Here you can specify the points as either percentages or in terms of the distance from the center of the screen in pixels. Which mode you use will probably depend on how you are defining your stimuli throughout the experiment. You can also specify the radius of tolerance around each point, and the plugin will calculate the percentage of measured gaze samples within that radius. This is a potentially useful heuristic for deciding whether or not to calibrate again. Options for controlling other details of the validation are explained in the <a href="/plugins/jspsych-webgazer-validate.md">documentation for the plugin</a>.</p>
<div class="highlight"><pre><span></span><code><span class="kd">var</span> <span class="nx">validation_trial</span> <span class="o">=</span> <span class="p">{</span>
<span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;webgazer-validate&#39;</span><span class="p">,</span>
<span class="nx">validation_points</span><span class="o">:</span> <span class="p">[[</span><span class="o">-</span><span class="mf">200</span><span class="p">,</span><span class="mf">200</span><span class="p">],</span> <span class="p">[</span><span class="mf">200</span><span class="p">,</span><span class="mf">200</span><span class="p">],[</span><span class="o">-</span><span class="mf">200</span><span class="p">,</span><span class="o">-</span><span class="mf">200</span><span class="p">],[</span><span class="mf">200</span><span class="p">,</span><span class="o">-</span><span class="mf">200</span><span class="p">]],</span>
@ -1476,6 +1585,7 @@
<span class="p">}</span>
</code></pre></div>
<p>We recommend performing calibration and validation periodically throughout your experiment.</p>
<h3 id="adding-eye-tracking-to-a-trial">Adding eye tracking to a trial<a class="headerlink" href="#adding-eye-tracking-to-a-trial" title="Permanent link">&para;</a></h3>
<p>To enable eye tracking for a trial in your experiment, you can simply add the WebGazer extension to the trial.</p>
<div class="highlight"><pre><span></span><code><span class="kd">var</span> <span class="nx">trial</span> <span class="o">=</span> <span class="p">{</span>
<span class="nx">type</span><span class="o">:</span> <span class="s1">&#39;html-keyboard-response&#39;</span><span class="p">,</span>
@ -1492,10 +1602,10 @@
</code></pre></div>
<p>This will turn on WebGazer at the start of the trial. </p>
<p>The <code>params</code> property in the <code>extensions</code> declaration allows you to pass in a list of <a href="https://www.w3schools.com/cssref/css_selectors.asp">CSS selector strings</a>. The <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect">bounding rectangle</a> of the DOM element that matches each selector will be recorded in the data for that trial. This allows for easy alignment of the gaze data and objects on the screen.</p>
<div class="highlight"><pre><span></span><code><span class="nx">webgazer_targets</span> <span class="o">:</span> <span class="p">[</span>
<span class="p">{</span><span class="nx">selector</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">top</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">left</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">right</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">bottom</span><span class="o">:</span><span class="p">...},</span>
<span class="p">{</span><span class="nx">selector</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">top</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">left</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">right</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">bottom</span><span class="o">:</span><span class="p">...},</span>
<span class="p">]</span>
<div class="highlight"><pre><span></span><code><span class="nx">webgazer_targets</span> <span class="o">:</span> <span class="p">{</span>
<span class="s1">&#39;selector&#39;</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">y</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">height</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">width</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">top</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">left</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">right</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">bottom</span><span class="o">:</span><span class="p">...}</span>
<span class="s1">&#39;selector&#39;</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">y</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">height</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">width</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">top</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">left</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">right</span><span class="o">:</span> <span class="p">...,</span> <span class="nx">bottom</span><span class="o">:</span><span class="p">...}</span>
<span class="p">}</span>
</code></pre></div>
<p>Gaze data will be added to the trial's data under the property <code>webgazer_data</code>. The gaze data is an array of objects. Each object has an <code>x</code>, a <code>y</code>, and a <code>t</code> property. The <code>x</code> and <code>y</code> properties specify the gaze location in pixels and <code>t</code> specifies the time in milliseconds since the start of the trial. Note that establishing the precision and accuracy of these measurements across the variety of web browsers and systems that your experiment participants might be using is quite difficult. For example, different browsers may cause small systematic shifts in the accuracy of <code>t</code> values. </p>
<div class="highlight"><pre><span></span><code><span class="nx">webgazer_data</span><span class="o">:</span> <span class="p">[</span>
@ -1525,7 +1635,7 @@
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;jspsych/plugins/jspsych-webgazer-init-camera.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;jspsych/plugins/jspsych-webgazer-calibrate.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;jspsych/plugins/jspsych-webgazer-validation.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;js/webgazer.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;js/webgazer/webgazer.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&quot;jspsych/extensions/jspsych-ext-webgazer.js&quot;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">&quot;stylesheet&quot;</span> <span class="na">href</span><span class="o">=</span><span class="s">&quot;jspsych/css/jspsych.css&quot;</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
@ -1611,10 +1721,13 @@
<span class="p">{</span> <span class="s2">&quot;x&quot;</span><span class="o">:</span> <span class="mf">606</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="o">:</span> <span class="mf">221</span><span class="p">,</span> <span class="s2">&quot;t&quot;</span><span class="o">:</span> <span class="mf">987</span><span class="p">}</span>
<span class="p">],</span>
<span class="s2">&quot;webgazer_targets&quot;</span><span class="o">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;selector&quot;</span><span class="o">:</span> <span class="s2">&quot;#jspsych-image-keyboard-response-stimulus&quot;</span><span class="p">,</span>
<span class="s2">&quot;top&quot;</span><span class="o">:</span> <span class="mf">135.33334350585938</span><span class="p">,</span>
<span class="s2">&quot;bottom&quot;</span><span class="o">:</span> <span class="mf">435.3333435058594</span><span class="p">,</span>
<span class="s2">&quot;#jspsych-image-keyboard-response-stimulus&quot;</span><span class="o">:</span> <span class="p">{</span>
<span class="s2">&quot;x&quot;</span><span class="o">:</span> <span class="mf">490</span><span class="p">,</span>
<span class="s2">&quot;y&quot;</span><span class="o">:</span> <span class="mf">135</span><span class="p">,</span>
<span class="s2">&quot;height&quot;</span><span class="o">:</span> <span class="mf">300</span><span class="p">,</span>
<span class="s2">&quot;width&quot;</span><span class="o">:</span> <span class="mf">300</span><span class="p">,</span>
<span class="s2">&quot;top&quot;</span><span class="o">:</span> <span class="mf">135</span><span class="p">,</span>
<span class="s2">&quot;bottom&quot;</span><span class="o">:</span> <span class="mf">435</span><span class="p">,</span>
<span class="s2">&quot;left&quot;</span><span class="o">:</span> <span class="mf">490</span><span class="p">,</span>
<span class="s2">&quot;right&quot;</span><span class="o">:</span> <span class="mf">790</span>
<span class="p">}</span>

View File

@ -1497,6 +1497,12 @@
<td>The number of times to repeat the sequence of calibration points.</td>
</tr>
<tr>
<td>point_size</td>
<td>numeric</td>
<td>20</td>
<td>Diameter of the calibration points in pixels.</td>
</tr>
<tr>
<td>randomize_calibration_order</td>
<td>bool</td>
<td><code>false</code></td>

View File

@ -1490,13 +1490,12 @@
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td>load_time</td>
<td>numeric</td>
<td>The time it took for webgazer to initialize. This can be a long time in some situations, so this value is recorded for troubleshooting when participants are reporting difficulty.</td>
</tr>
</tbody>
</table>
<p>No additional data collected.</p>
<h2 id="example">Example<a class="headerlink" href="#example" title="Permanent link">&para;</a></h2>
<h4 id="parameterless-use">Parameterless use<a class="headerlink" href="#parameterless-use" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code><span class="kd">var</span> <span class="nx">init_camera</span> <span class="o">=</span> <span class="p">{</span>

View File

@ -1509,7 +1509,7 @@
<tr>
<td>point_size</td>
<td>numeric</td>
<td>10</td>
<td>20</td>
<td>Diameter of the validation points in pixels.</td>
</tr>
<tr>
@ -1534,7 +1534,7 @@
<tr>
<td>raw_gaze</td>
<td>array</td>
<td>Raw gaze data for the trial. The array will contain a nested array for each validation point. Within each nested array will be a list of <code>{dx,dy}</code> values specifying the distance from the target for that gaze point.</td>
<td>Raw gaze data for the trial. The array will contain a nested array for each validation point. Within each nested array will be a list of <code>{x,y,dx,dy}</code> values specifying the absolute x and y pixels, as well as the distance from the target for that gaze point.</td>
</tr>
<tr>
<td>percent_in_roi</td>
@ -1551,6 +1551,11 @@
<td>numeric</td>
<td>The average number of samples per second. Calculated by finding samples per second for each point and then averaging these estimates together.</td>
</tr>
<tr>
<td>validation_points</td>
<td>array</td>
<td>The list of validation points, in the order that they appeared.</td>
</tr>
</tbody>
</table>
<h2 id="example">Example<a class="headerlink" href="#example" title="Permanent link">&para;</a></h2>

File diff suppressed because one or more lines are too long

View File

@ -1,327 +1,327 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url><url>
<loc>None</loc>
<lastmod>2021-03-24</lastmod>
<lastmod>2021-04-11</lastmod>
<changefreq>daily</changefreq>
</url>
</urlset>

Binary file not shown.