FiveChoice - version_tracker.txt ---------------------------- Version numbers are stored in: (1) .iss file (influences setup display, Control Panel) (2) .rc file (About box) (3) g_strVersion (4) .hm3 (Help) (5) web site whatsnew.shtml Version history: =============================================================================== 1.0 =============================================================================== =============================================================================== 1.1 =============================================================================== - Majority of development done under this number! - First version finished 25/3/2002. =============================================================================== 2.0 =============================================================================== - From point of introducing "default ODBC DSN" system, 15 Aug 2002. - 22-Sep-2002 Integrated HTML Help =============================================================================== 2.1 =============================================================================== - missing UpdateData(TRUE) bugfix =============================================================================== 2.2 =============================================================================== - horiz scroll listbox - about button =============================================================================== 2.3 (22 Nov 2003) =============================================================================== - writes version number and compilation date to summary file =============================================================================== 2.4 (26 Mar 2004) =============================================================================== - option to have front panel responses prolong timeouts or not - XML config - option added: front panel responding while waiting to start trial is punished / not. - option added: limit on total number of trials - help file contains state diagram =============================================================================== 2.5 (5 and 14 Apr 2004) =============================================================================== - had failed to set m_bValidConfigVersion = true, so it complained about wrong XML versions inappropriately - bug: occasional trials (10 out of 30,000 in test run) flagged as both correct *and* omission; almost certainly due to lack of m_iPhase checks in the timer-handling section of the code. Fixed. - m_iPreferredBox - more progress info on main dialogue =============================================================================== 2.6 (8 June 2004) =============================================================================== - option to punish perseverative responses following *correct* responses (in AWAITING_COLLECT state) - clock time of finishing, displayed on screen after finishing - time to go shown - two user interfaces (#define FIVECHOICE_USE_SMALL_DIALOGUE), as two different build targets (FiveChoice.exe and FiveChoice_SmallDialogue.exe) =============================================================================== 2.7 (10 June 2004) =============================================================================== - Debounce inputs. (Problem exhibited as a mechanical food alcove switch bouncing; this registered erroneously as perseverative pushes when it was really a single trial-starting response.) - Kludge so FiveChoice_SmallDialogue.exe loads FiveChoice.chm as its help file =============================================================================== 2.8 (2-3 Sep 2004) =============================================================================== - Records more responses, and classifies them with a lookup table - Yoking. Requested by Jennie Milstein, 25 Aug 2004. - Yoking architecture: modelled on SecondOrder. - Obviously, outputs for the yoked boxes are easy. - Inputs... always complex to classify. Based on Arachnid code for Jeff, 19 Jan 2000. Details in the Help file (Yoking section). =============================================================================== 2.9 (14 Feb 2005) =============================================================================== - Forced-choice option (only offer one hole on a given session), for Olivia. (m_bForcedChoice, m_iForcedHole) - Draw-without-replacement option (m_bPseudorandom, m_iDWORMultiplier) - Bug fixed: complained inappropriately about wrong config version upon loading ... solution: empty constructor expanded to CFiveChoiceConfig::CFiveChoiceConfig() { SetDefaultParameters(); m_bValidConfigVersion = true; } =============================================================================== 3.0 (10 Oct 2005) =============================================================================== - Option not to record OFF events (m_bIgnoreOffEvents). - Extra note (17 Oct 2006) about this: ... if this flag is set, the server doesn't request off events ... but the actual consequences of this are nil, since no off events are recorded or responded to. ... The facility to do so is there for future expansion... :-) =============================================================================== 3.1 (14 Mar 2006) =============================================================================== - Bug fixed: wasn't recording events from yoked boxes numbered 10 or above. =============================================================================== 3.2 (4-6 Apr 2006) =============================================================================== - Help modified to make process of running multiple copies for multiple boxes clearer. - option for variable stimulus durations (within one session). - DWOR option for initial pause values - DWOR option for stimulus duration values - Note database modification: FiveChoice_Config.StimulusDuration_ms REMOVED FiveChoice_Config.StimulusDurationValues_ms ADDED FiveChoice_Config.DWORMultiplier renamed LocationDWORMultiplier FiveChoice_Config.Pseudorandom renamed LocationPseudorandom FiveChoice_TrialData.IntendedStimulusDuration_ms ADDED FiveChoice_TrialData.StimulusOffAt_ms ADDED FiveChoice_Config.InitialPausePseudorandom ADDED FiveChoice_Config.InitialPauseDWORMultiplier ADDED FiveChoice_Config.StimulusDurationPseudorandom ADDED FiveChoice_Config.StimulusDurationDWORMultiplier ADDED =============================================================================== 3.3 (7 Apr 2006) =============================================================================== - better handling of (true) stimulus duration = 0 (for Mirjana Carli). - display running total of perseverative responses (for Mirjana Carli). =============================================================================== 3.4 (18 May 2006) =============================================================================== - m_fSessionTimeExtra option ("wait up to X minutes after [the session time has expired] for the current trial to finish") =============================================================================== 3.5 (25 May 2006) =============================================================================== - For MC: m_bResponsesInPrestimTimeoutArePremature - For MC: m_bResponsesInPoststimTimeoutArePerseverative =============================================================================== 3.6 (4 July 2006) =============================================================================== - Bug fixed: was possible to claim boxes with a yoked box number matching the master box number (or another yoked box number). =============================================================================== 3.7 (8 March 2007) =============================================================================== - easier compilation by user =============================================================================== 3.8 (6 July 2007) =============================================================================== - CTrialRecord::RecordPellets(int nPellets) - minor bug fix. =============================================================================== 4.0 (10-13 June 2008) =============================================================================== - VERY OLD BOXES. Some boxes have no computer control over light/noise dimming, or no dimmers whatsoever. - OLD BOXES. Camcog/Campden Instruments 80600 (rat) and 80610 (mouse) Nine Hole Box Operant Chamber. These boxes have two hand-set dials (DIAL A or V1, and DIAL B or V2) that set two intensity levels apart from full and off. Noise distractors have a single, manual intensity control that is not computer-influenced in any way. The lights are controlled as follows. There are output lines Lamp1A - Lamp 9A, and Lamp1B - Lamp9B. For a given lamp (of which 5 are used in the five-choice task): 'A' 'B' result off off off off on on with dimmer setting as set by dial V2 on off on with full power on on on with dimmer setting as set by dial V1 - NEW BOXES. Campden Instruments 80600A (rat) and 80610A (mouse) Nine Hole Box Operant Chamber. These boxes have a 3-bit (8-level) control over dimming level. They can be configured for 4-level (DIM2 and DIM1 only) or 8-level dimming control (DIM0, DIM1, and DIM2), but are always factory set for 8-level control. They have three output lines, which we'll call DIM0, DIM1, and DIM2. Brightnesses (DIM2, DIM1, DIM0 in sequence): 000 001 010 011 100 101 110 111 100% 90% 80% 70% 60% 50% 40% 30% brightness (100% roughly equals 24V 3W bulb) Volumes (likewise): 000 001 010 011 100 101 110 111 105dB 100dB 95dB 90dB 85dB 80dB 75dB 70dB (dB SPL? manual doesn't say) Control system: "To switch on a stimulus at a particular brightness or noise level, firstly the control lines must be set... Once the value on these control lines has been set, the required stimulus can be switched on. The selected stimulus will then switch on at the specified value. The stimulus will stay at this value until switched off again. Note: It is important to always select the required control value before switching a stimulus, otherwise unexpected results may occur. The control value must remain for 10ms after the stimulus has been switched [on]." [Campden say that 10ms may include a bit of a safety margin, i.e. could perhaps use less but not fully tested like that.] [David Maul, Campden, 10/6/8: 5ms.] The "volume" control set in this way applies to lights and noise. No time delay is required between setting the DIM lines and turning on the line in question, as long as the DIM lines are set first [JG pers. comm. 5/6/8]. - Which is more convenient: having to set 'fake' lines once, or choosing box type each time you run (because one difference is when you claim the box, so being completely config-based doesn't fully evade this problem). My guess: more convenient to have 'fake' lines you can configure once then forget. So, new line needed for everyone: # STIMLIGHT_0 corresponds to Lamp1A (old boxes) or Lamp1 (new boxes) # STIMLIGHT_1 corresponds to Lamp3A (old boxes) or Lamp3 (new boxes) # STIMLIGHT_2 corresponds to Lamp5A (old boxes) or Lamp5 (new boxes) # STIMLIGHT_3 corresponds to Lamp7A (old boxes) or Lamp7 (new boxes) # STIMLIGHT_4 corresponds to Lamp9A (old boxes) or Lamp9 (new boxes) STIMLIGHT_0_DIM STIMLIGHT_1_DIM STIMLIGHT_2_DIM STIMLIGHT_3_DIM STIMLIGHT_4_DIM # ... these correspond to Lamp1B, Lamp3B, Lamp5B, Lamp7B, Lamp9B - and apply to the OLD boxes. # In new boxes, these should be set to fake (non-existent) lines. DIM0 DIM1 DIM2 # ... these correspond to DIM0, DIM1, and DIM2 - and apply to the NEW boxes. # In old boxes, these should be set to fake (non-existent) lines. - Database fields deleted: FiveChoice_Config.NoiseDuration_ms Database fields added: FiveChoice_Config.NoiseDurations_ms FiveChoice_Config.StimulusIntensities FiveChoice_Config.NoiseIntensities FiveChoice_Config.NoisePseudorandom FiveChoice_Config.NoiseDWORMultiplier FiveChoice_Config.DimmingSystem FiveChoice_Config.DimmingWaitTimeMs FiveChoice_TrialData.NoiseDuration_ms FiveChoice_TrialData.NoiseIntensity FiveChoice_TrialData.StimulusIntensity -- - also, output variables were using DWORD with default of -1, and DWORD cannot take negative values; it's an unsigned data type. The Access "long integer" converter (RFX_Long) takes type long, which is a 32-bit signed integer; DWORD is a 32-bit unsigned integer. Therefore, convert those DWORDs to long. (I haven't changed their names, though! Too lazy.) =============================================================================== 5.0 (12 Jan 2009) =============================================================================== - Server default changed from "loopback" to "localhost" (Windows Vista compatibility and more general standardization). =============================================================================== 5.1 (30 April 2009, MRFA) [originally 5.0 but see above] =============================================================================== - Added a new release target, for use with Tahl Holtzman's "strobe" output hardware for online psychophys. New intended behaviour: Every time a light, RNF or noise is turned on, a signal output line is signalled for 1ms. No change in signal for different light levels, but different signals for different holes. Signal is briefly preceded by a signal on a 'strobe' line. This version of the task requires 8 more output lines for each box: "SIGNAL_STIMLIGHT_0", "SIGNAL_STIMLIGHT_1", "SIGNAL_STIMLIGHT_2", "SIGNAL_STIMLIGHT_3", "SIGNAL_STIMLIGHT_4", "SIGNAL_NOISE", "SIGNAL_RNF", "STROBE" No changes to Databases or config. Only modifications are to FiveChoiceTask.cpp & .h All code modifications are enclosed by preprocesser directives #ifdef FIVECHOICE_USE_STROBE So no modification to existing targets =============================================================================== 5.2 (28 Feb 2010, RNC) =============================================================================== - Update for compilation under VS2008 Method: - change all "#include " to "#include " followed by "using namespace std;" - x.open(filename, ios::out, filebuf::sh_read); -- delete last parameter - change local Mersenne twister to Boost ... replacing int g_RandomNumberForShuffles(int n) [from ImpulsiveChoice code] - fix minor bugs introduced by stricter compiler conformity - switch to XMLParamIO2 - discovered that two fields in FiveChoice_Config database table were single, changed to long: PelletPulseLength_ms InterpelletGap_ms =============================================================================== 5.3 (1 May 2011, RNC) =============================================================================== - Option to specify exactly which holes are used. Database changes accordingly. REMOVED: m_bForcedChoice / FiveChoice_Config.ForcedChoice m_iForcedHole / FiveChoice_Config.ForcedHole ADDED: m_vbUseHole / FiveChoice_Config.UseHole[0-4] =============================================================================== 5.4 (19 Oct 2011, RNC) =============================================================================== - v5.4 (19 Oct 2011). "PerseverativeNosepokes," missing from CSV header output in summary file - data was there, but header was missing (so subsequently mis-aligned) - fixed. (Database was unaffected.) See also accompanying Python rescue script. The missing "PerseverativeNosepokes," field is between "PerseverativePanelPushes," and PerseverativeNosepokesSameHole,". - Date/time string stored in textfile now includes seconds fields. See g_strDateTimeFormat. =============================================================================== 5.5 (4 Dec 2017, RNC, for Chiara Toschi) =============================================================================== - Option to flip houselight (so: off at baseline, on for error). (Normal is: on at baseline, off for error.) See SetHouselightState(). - Option to add training stage with all holes on, all holes staying on indefinitely, and all holes correct. ... m_bTrainingMode ... but keep existing limited hold specification. - Option to use VR reinforcement, with DWOR system because nobody likes the risk of true randomness. Note that "nonreward" is identical to "reward" except the actual pellet delivery. (It does NOT look like "punishment"/timeout. As per Chiara Toschi, 2017-12-04.) - Database changes accordingly: ADDED: CFiveChoiceConfig::m_bFlipHouselight / FiveChoice_Config.FlipHouselight CFiveChoiceConfig::m_bTrainingMode / FiveChoice_Config.TrainingMode CFiveChoiceConfig::m_bVariableReinforcement / FiveChoice_Config.VariableReinforcement CFiveChoiceConfig::m_iRewardsPerSet / FiveChoice_Config.RewardsPerSet CFiveChoiceConfig::m_iNonrewardsPerSet / FiveChoice_Config.NonrewardsPerSet CTrialRecordItem::m_bRewarded / FiveChoice_TrialData.Rewarded =============================================================================== 5.6 (11 Dec 2018, RNC) =============================================================================== - Bugfix: m_iNonrewardsPerSet was being written to the XML config file, but not read correctly back in (so changes were possible manually but weren't properly persistent). THINGS TO DO ------------