Experiment() {

  Context() {

    AssignmentGroup() {
      ExperimentName = lang2("Response Time for Acoustic and Optic Signals", "Reaktionszeit auf akustische und optische Signale");
      SubjectCode = "pxlab";
      TrialFactor = 1;
      new SignalType = 0;
    }

    Session:Optical(SignalType) {
      Instruction() {
        Text = lang2(["Response Time to an Optic Signal",
		" ",
		"You will see a fixation mark followed by an optical signal dot on the screen. Please press a mouse button as fast as you can after the target signal is shown.", 
		" ",
		"Press any key to start!"],["Reaktionszeit auf ein optisches Signal\n \nSie werden nach dem Kreuz ein optisches Signal (Punkt) sehen.\n Drücken Sie die Maustaste so schnell wie möglich wenn Sie den Punkt sehen!\n \nZum Starten bitte Taste drücken!"]);
      }
    }

    SessionEnd:Optical() {
      SessionEndMessage();
    }

    Session:Acoustic(SignalType) {
      Instruction() {
        Text = lang2(["Response Time to an Acoustic Signal",
		" ",
		"You will see a fixation mark followed by an acoustic signal. Please press a mouse button as fast as you can after you hear the target signal.", 
		" ",
		"Press any key to start!"],
		["Reaktionszeit auf einen akustischen Reiz\n \nSie werden einen akustischen Reiz hören, nachdem ein Kreuz auf dem Bildschirm erschien.\nBitte drücken Sie die Maustaste so schnell wie möglich wenn Sie diesen Reiz hören.\n \nZum Starten bitte Taste drücken!"]);
      }
    }

    SessionEnd:Acoustic() {
      SessionEndMessage() {
	Text = "P A U S E";
      }
    }

    Block(StoreData, TrialFactor) {
    }

    Trial:Optical(SubjectCode, SignalType, ClearScreenRandomTime.Duration, SimpleDisk.ResponseTime) {
      ClearScreen()
      {
        Timer = de.pxlab.pxl.TimerCodes.VS_CLOCK_TIMER;
        Duration = 500;
      }
      FixationMark() {
        Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
        Duration = 300;
      }
      ClearScreen:WaitSignal()
      {
        Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
        Duration = 200;
      }
      ClearScreenRandomTime()
      {
        Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
        ExpectedWait = 1000;
        WaitingTimeLimit = 3500;
        Duration = 3000;
      }
      SimpleDisk() {
        Timer = de.pxlab.pxl.TimerCodes.VS_RESPONSE_TIMER;
        Size = 200;
	Color = White;
      }
      Feedback()
      {
        Text = "%Trial:Optical.SimpleDisk.ResponseTime@i% ms";
        Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
        Duration = 1000;
      }
    }

    Trial:Acoustic(SubjectCode, SignalType, ClearScreenRandomTime.Duration, ResponseTime) {
      ClearScreen()
      {
        Timer = de.pxlab.pxl.TimerCodes.VS_CLOCK_TIMER;
        Duration = 500;
      }
      FixationMark() {
        Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
        Duration = 300;
      }
      ClearScreen:WaitSignal()
      {
        Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
        Duration = 200;
      }
      ClearScreenRandomTime()
      {
        Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
        ExpectedWait = 1000;
        WaitingTimeLimit = 3500;
        Duration = 3000;
      }
      SyntheticSound() {
        Timer = de.pxlab.pxl.TimerCodes.END_OF_MEDIA_TIMER | de.pxlab.pxl.TimerCodes.START_RESPONSE_TIMER;
        Gain = 1.0;
        Duration = 200;
	Channels = 1;
        QuietLead = 0;
        Envelope = de.pxlab.pxl.SoundEnvelopeCodes.CONSTANT;
        Wave = de.pxlab.pxl.SoundWaveCodes.PURE_TONE;
        WavePars = 3000;
      }
      ClearScreen:Response()
      {
        Timer = de.pxlab.pxl.TimerCodes.RESPONSE_TIMER | de.pxlab.pxl.TimerCodes.STOP_RESPONSE_TIMER;
      }
      Feedback()
      {
        Text = "%ResponseTime@i% ms";
        Timer = de.pxlab.pxl.TimerCodes.CLOCK_TIMER;
        Duration = 1000;
      }
    }

  }

  Procedure() {
    Session:Acoustic(0) {
      Block(0, 2) {
        Trial:Acoustic(?, ?, ?, ?);
      }
      Block(1, 4) {
        Trial:Acoustic(?, ?, ?, ?);
      }
    }
    Session:Optical(0) {
      Block(0, 2) {
        Trial:Optical(?, ?, ?, ?);
      }
      Block(1, 4) {
        Trial:Optical(?, ?, ?, ?);
      }
    }
  }
}


