Experiment(){
Context(){
AssignmentGroup(){
new dynamic = 1;
ExperimentName = dynamic? "Dynamic ModelFest Grating Patterns": "Static ModelFest Grating Patterns";
SubjectCode = "pxlab";
new meanCol = colorAtLum(white(), 30);
new highCol = colorAtLum(white(), 50);
ScreenBackgroundColor = meanCol;
RandomizeTrials = 0;
}
Session(){
Instruction(){
Text = ["The ModelFest Set of Grating Patterns", " ", "We show you animated versions of the ModelFest set of grating patterns. Amplitudes are set such that every pattern is clearly visible. Observation distance should be such that the pattern field appears under a visual angle of 2 degrees. Presentation time is 500 ms.", " ", "Press any key now to start!"];
Color = white();
Width = 480;
FontSize = 24;
}
}
SessionEnd(){
SessionEndMessage(){
}
}
Trial( TrialCounter, GaborFest.HorizontalGaussianStandardDeviation, GaborFest.VerticalGaussianStandardDeviation, GaborFest.Frequency, GaborFest.Amplitude, GaborFest.Orientation, GaborFest.Bessel, GaborFest.Concentric){
FixationMark(){
Overlay = de.pxlab.pxl.OverlayCodes.DISPLAY_LIST;
Type = de.pxlab.pxl.FixationCodes.CORNER_MARKS;
Color = white();
Size = Trial.GaborFest.FixationSize;
EnclosedWidth = Trial.GaborFest.Size;
EnclosedHeight = Trial.GaborFest.Size;
LineWidth = Trial.GaborFest.FixationSize/5;
}
ClearScreen(){
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
Duration = 500;
}
GaborFest(){
MeanColor = meanCol;
HighColor = highCol;
Size = 256;
PixelPerDegree = 120;
HorizontalGaussianStandardDeviation = 0.5;
VerticalGaussianStandardDeviation = 0.5;
Frequency = 2;
Phase = 0;
Amplitude = 1;
Orientation = 0;
Bessel = 0;
Concentric = 0;
FixationType = de.pxlab.pxl.FixationCodes.CORNER_MARKS;
FixationColor = white();
FixationSize = 20;
Timer = de.pxlab.pxl.TimerCodes.END_OF_MEDIA_TIMER;
Duration = 500;
Animation = dynamic;
FrameTimer = dynamic? de.pxlab.pxl.TimerCodes.VS_CLOCK_TIMER: de.pxlab.pxl.TimerCodes.RELEASE_RESPONSE_TIMER;
FramesPerCycle = 17;
TemporalGaussianStandardDeviation = 125;
}
ClearScreen:Post(){
Timer = de.pxlab.pxl.TimerCodes.NO_TIMER;
}
}
Trial:Gaussian( TrialCounter, GaussianFest.HorizontalGaussianStandardDeviation, GaussianFest.VerticalGaussianStandardDeviation){
FixationMark(){
Overlay = de.pxlab.pxl.OverlayCodes.DISPLAY_LIST;
Type = de.pxlab.pxl.FixationCodes.CORNER_MARKS;
Color = white();
Size = Trial.GaborFest.FixationSize;
EnclosedWidth = Trial.GaborFest.Size;
EnclosedHeight = Trial.GaborFest.Size;
LineWidth = Trial.GaborFest.FixationSize/5;
}
ClearScreen(){
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
Duration = 500;
}
GaussianFest(){
MeanColor = meanCol;
HighColor = highCol;
Size = Trial.GaborFest.Size;
PixelPerDegree = Trial.GaborFest.PixelPerDegree;
HorizontalGaussianStandardDeviation = Trial.GaborFest.HorizontalGaussianStandardDeviation;
VerticalGaussianStandardDeviation = Trial.GaborFest.VerticalGaussianStandardDeviation;
Amplitude = Trial.GaborFest.Amplitude;
FixationType = Trial.GaborFest.FixationType;
FixationColor = Trial.GaborFest.FixationColor;
FixationSize = Trial.GaborFest.FixationSize;
Timer = Trial.GaborFest.Timer;
Duration = Trial.GaborFest.Duration;
Animation = Trial.GaborFest.Animation;
FrameTimer = Trial.GaborFest.FrameTimer;
FramesPerCycle = Trial.GaborFest.FramesPerCycle;
TemporalGaussianStandardDeviation = Trial.GaborFest.TemporalGaussianStandardDeviation;
}
ClearScreen:Post(){
Timer = de.pxlab.pxl.TimerCodes.NO_TIMER;
}
}
Trial:Multipole( TrialCounter, MultipoleFest.HorizontalGaussianStandardDeviation, MultipoleFest.VerticalGaussianStandardDeviation, MultipoleFest.SubSize, MultipoleFest.Amplitude, MultipoleFest.Type){
FixationMark(){
Overlay = de.pxlab.pxl.OverlayCodes.DISPLAY_LIST;
Type = de.pxlab.pxl.FixationCodes.CORNER_MARKS;
Color = white();
Size = Trial.GaborFest.FixationSize;
EnclosedWidth = Trial.GaborFest.Size;
EnclosedHeight = Trial.GaborFest.Size;
LineWidth = Trial.GaborFest.FixationSize/5;
}
ClearScreen(){
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
Duration = 500;
}
MultipoleFest(){
SubSize = 0.5/60;
Type = de.pxlab.pxl.MultipoleCodes.EDGE_PATTERN;
MeanColor = meanCol;
HighColor = highCol;
Size = Trial.GaborFest.Size;
PixelPerDegree = Trial.GaborFest.PixelPerDegree;
HorizontalGaussianStandardDeviation = Trial.GaborFest.HorizontalGaussianStandardDeviation;
VerticalGaussianStandardDeviation = Trial.GaborFest.VerticalGaussianStandardDeviation;
Amplitude = Trial.GaborFest.Amplitude;
FixationType = Trial.GaborFest.FixationType;
FixationColor = Trial.GaborFest.FixationColor;
FixationSize = Trial.GaborFest.FixationSize;
Timer = Trial.GaborFest.Timer;
Duration = Trial.GaborFest.Duration;
Animation = Trial.GaborFest.Animation;
FrameTimer = Trial.GaborFest.FrameTimer;
FramesPerCycle = Trial.GaborFest.FramesPerCycle;
TemporalGaussianStandardDeviation = Trial.GaborFest.TemporalGaussianStandardDeviation;
}
ClearScreen:Post(){
Timer = de.pxlab.pxl.TimerCodes.NO_TIMER;
}
}
Trial:Collinear( TrialCounter, CollinearGaborFest.Phase){
FixationMark(){
Overlay = de.pxlab.pxl.OverlayCodes.DISPLAY_LIST;
Type = de.pxlab.pxl.FixationCodes.CORNER_MARKS;
Color = white();
Size = Trial.GaborFest.FixationSize;
EnclosedWidth = Trial.GaborFest.Size;
EnclosedHeight = Trial.GaborFest.Size;
LineWidth = Trial.GaborFest.FixationSize/5;
}
ClearScreen(){
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
Duration = 500;
}
CollinearGaborFest(){
MeanColor = meanCol;
HighColor = highCol;
Size = Trial.GaborFest.Size;
PixelPerDegree = Trial.GaborFest.PixelPerDegree;
HorizontalGaussianStandardDeviation = Trial.GaborFest.HorizontalGaussianStandardDeviation/8;
VerticalGaussianStandardDeviation = Trial.GaborFest.VerticalGaussianStandardDeviation/8;
NumberOfGabors = 5;
Frequency = 8;
Phase = [0, 0];
Amplitude = Trial.GaborFest.Amplitude;
FixationType = Trial.GaborFest.FixationType;
FixationColor = Trial.GaborFest.FixationColor;
FixationSize = Trial.GaborFest.FixationSize;
Timer = Trial.GaborFest.Timer;
Duration = Trial.GaborFest.Duration;
Animation = Trial.GaborFest.Animation;
FrameTimer = Trial.GaborFest.FrameTimer;
FramesPerCycle = Trial.GaborFest.FramesPerCycle;
TemporalGaussianStandardDeviation = Trial.GaborFest.TemporalGaussianStandardDeviation;
}
ClearScreen:Post(){
Timer = de.pxlab.pxl.TimerCodes.NO_TIMER;
}
}
Trial:Image( TrialCounter, ImageFest.HorizontalGaussianStandardDeviation, ImageFest.VerticalGaussianStandardDeviation, ImageFest.FileName){
FixationMark(){
Overlay = de.pxlab.pxl.OverlayCodes.DISPLAY_LIST;
Type = de.pxlab.pxl.FixationCodes.CORNER_MARKS;
Color = white();
Size = Trial.GaborFest.FixationSize;
EnclosedWidth = Trial.GaborFest.Size;
EnclosedHeight = Trial.GaborFest.Size;
LineWidth = Trial.GaborFest.FixationSize/5;
}
ClearScreen(){
Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
Duration = 500;
}
ImageFest(){
MeanColor = meanCol;
HighColor = highCol;
Directory = "./images/modelfest";
PixelPerDegree = Trial.GaborFest.PixelPerDegree;
HorizontalGaussianStandardDeviation = Trial.GaborFest.HorizontalGaussianStandardDeviation;
VerticalGaussianStandardDeviation = Trial.GaborFest.VerticalGaussianStandardDeviation;
Amplitude = Trial.GaborFest.Amplitude;
FixationType = Trial.GaborFest.FixationType;
FixationColor = Trial.GaborFest.FixationColor;
FixationSize = Trial.GaborFest.FixationSize;
Timer = Trial.GaborFest.Timer;
Duration = Trial.GaborFest.Duration;
Animation = Trial.GaborFest.Animation;
FrameTimer = Trial.GaborFest.FrameTimer;
FramesPerCycle = Trial.GaborFest.FramesPerCycle;
TemporalGaussianStandardDeviation = Trial.GaborFest.TemporalGaussianStandardDeviation;
}
ClearScreen:Post(){
Timer = de.pxlab.pxl.TimerCodes.NO_TIMER;
}
}
// Command line assignments
AssignmentGroup();
}
Procedure(){
Session(){
Block(){
/* Zero [not contained in the original ModelFest set but useful for 2AFC trials] */// Trial:Multipole(?, ?, ?, 0.25, ?, de.pxlab.pxl.MultipoleCodes.ZERO_PATTERN); /* GaborPatch1 - GaborPatch10 */
Trial( ?, ?, ?, <30, 22.6, 16, 11.3, 8, 5.66, 4, 2.83, 2, 1.2>, ?, ?, ?, ?);
/* GaborPatch11 - GaborPatch14 *//**/
Trial( ?, 0.5/2, 0.5/2, 2, ?, ?, ?, ?);
Trial( ?, 0.5/4, 0.5/4, 4, ?, ?, ?, ?);
Trial( ?, 0.5/8, 0.5/8, 8, ?, ?, ?, ?);
Trial( ?, 0.5/16, 0.5/16, 16, ?, ?, ?, ?);
/**//* ElongatedGabor15 - ElongatedGabor17 *//**/
Trial( ?, ?, 1/4, 4, ?, ?, ?, ?);
Trial( ?, ?, 1/8, 8, ?, ?, ?, ?);
Trial( ?, ?, 1/16, 16, ?, ?, ?, ?);
/**//* Baguette18 - Baguette21 *//**/
Trial( ?, 1/4, 0.5/4, 4, ?, ?, ?, ?);
Trial( ?, ?, 0.5/4, 4, ?, ?, ?, ?);
Trial( ?, 0.5/4, 1/4, 4, ?, ?, ?, ?);
Trial( ?, 0.5/4, ?, 4, ?, ?, ?, ?);
/**//* Subthreshold22 - Subthreshold25 *//**/
Trial( ?, ?, ?, [2, 2.8284], 0.5, ?, ?, ?);
Trial( ?, ?, ?, [2, 4], 0.5, ?, ?, ?);
Trial( ?, ?, ?, [4, 5.6568], 0.5, ?, ?, ?);
Trial( ?, ?, ?, [4, 8], 0.5, ?, ?, ?);
/**//* Gaussians26 - Gaussians29 *//**/
Trial:Gaussian( ?, 30/60, 30/60);
Trial:Gaussian( ?, 8.43/60, 8.43/60);
Trial:Gaussian( ?, 2.106/60, 2.106/60);
Trial:Gaussian( ?, 1.05/60, 1.05/60);
/**//* Edge30 */
Trial:Multipole( ?, ?, ?, ?, ?, de.pxlab.pxl.MultipoleCodes.EDGE_PATTERN);
/* Line31 */
Trial:Multipole( ?, ?, ?, ?, ?, de.pxlab.pxl.MultipoleCodes.LINE_PATTERN);
/* Dipole32 */
Trial:Multipole( ?, ?, ?, ?, ?, de.pxlab.pxl.MultipoleCodes.DIPOLE_PATTERN);
/* GaborString33 - GaborString34 *//**/
Trial:Collinear( ?, ?);
Trial:Collinear( ?, [0, 3.1416]);
/**//* Noise35 *//**/
Trial:Multipole( ?, ?, ?, 1/60, ?, de.pxlab.pxl.MultipoleCodes.STATIC_WHITE_NOISE_PATTERN);
/**//* Orientation36 - Orientation37 *//**/
Trial( ?, 0.5/4, 0.5/4, 4, ?, 45, ?, ?);
Trial( ?, 0.5/4, 0.5/4, 4, ?, 90, ?, ?);
/**//* Plaids38 - Plaids39 *//**/
Trial( ?, 0.5/4, 0.5/4, [4, 4], 0.5, [0, 90], ?, ?);
Trial( ?, 0.5/4, 0.5/4, [4, 4], 0.5, [0, 45], ?, ?);
/**//* Disk40 */
Trial:Multipole( ?, ?, ?, 0.25, ?, de.pxlab.pxl.MultipoleCodes.DISK_PATTERN);
/* Bessel41 */
Trial( ?, 0.5/2, 0.5/2, 4, ?, ?, 1, ?);
/* Checkerboard42 */
Trial:Multipole( ?, ?, ?, 0.25, ?, de.pxlab.pxl.MultipoleCodes.CHECKERBOARD_PATTERN);
/* NaturalScene43 */
Trial:Image( ?, ?, ?, "sf_256_bw.jpg");
/* Noise44 *//**/
Trial:Multipole( ?, ?, ?, 1/60, ?, de.pxlab.pxl.MultipoleCodes.WHITE_NOISE_PATTERN);
}
}
}
}