Skip to content

Commit 304f1af

Browse files
committed
repetitions per frequency
1 parent b9c2925 commit 304f1af

File tree

1 file changed

+25
-10
lines changed
  • iblrig_custom_tasks/samuel_tonotopicMapping

1 file changed

+25
-10
lines changed

iblrig_custom_tasks/samuel_tonotopicMapping/task.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,13 @@ def __init__(self, *args, **kwargs):
3131
)
3232
Session.frequencies = np.round(self.frequencies).astype(int)
3333

34-
# repetitions per state machine run (253 states max)
35-
self.repetitions = 253 // len(self.frequencies)
34+
# calculate repetitions per state machine run (253 states max)
35+
self.repetitions = []
36+
max_reps_per_trial = (253 // self.n_frequencies)
37+
reps_remaining = self.task_params['n_reps_per_freq']
38+
while reps_remaining > 0:
39+
self.repetitions.append(min(max_reps_per_trial, reps_remaining))
40+
reps_remaining -= self.repetitions[-1]
3641

3742
# generate stimuli
3843
self.stimuli = []
@@ -51,6 +56,14 @@ def __init__(self, *args, **kwargs):
5156

5257
# self.attenuation = pd.read_csv(self.get_task_directory().joinpath('attenuation.csv'))
5358

59+
@property
60+
def n_frequencies(self):
61+
return len(self.frequencies)
62+
63+
@property
64+
def n_state_machines(self):
65+
return len(self.repetitions)
66+
5467
def start_mixin_sound(self):
5568
logger.info(f'Pushing {len(self.frequencies)} stimuli to Harp soundcard')
5669
sound.configure_sound_card(sounds=self.stimuli, indexes=self.indices, sample_rate=self.task_params['fs'])
@@ -82,12 +95,12 @@ def softcode_handler(softcode: int) -> None:
8295
frequency_index = Session.sequence[state_index]
8396
frequency = Session.frequencies[frequency_index]
8497
n_states = len(Session.sequence)
85-
logger.info(f'{state_index + 1:03d}/{n_states}: {frequency:5d} Hz')
98+
logger.info(f'- {state_index + 1:03d}/{n_states}: {frequency:5d} Hz')
8699

87-
def get_state_machine(self, seed: int) -> StateMachine:
100+
def get_state_machine(self, sma_idx: int) -> StateMachine:
88101
# generate shuffled sequence, seeded with state machine number
89-
Session.sequence = np.repeat(np.arange(len(self.frequencies)), self.repetitions)
90-
np.random.seed(seed)
102+
Session.sequence = np.repeat(np.arange(len(self.frequencies)), self.repetitions[sma_idx])
103+
np.random.seed(sma_idx)
91104
np.random.shuffle(Session.sequence)
92105

93106
# build state machine
@@ -105,10 +118,12 @@ def _run(self):
105118
logger.info('Sending spacers to BNC ports')
106119
self.send_spacers()
107120

108-
sma = self.get_state_machine(1)
109-
self.bpod.send_state_machine(sma)
110-
self.bpod.run_state_machine(sma)
111-
self.bpod.session.current_trial.export()
121+
for sma_idx in range(self.n_state_machines):
122+
logger.info(f'State Machine {sma_idx + 1}/{self.n_state_machines}')
123+
sma = self.get_state_machine(sma_idx)
124+
self.bpod.send_state_machine(sma)
125+
self.bpod.run_state_machine(sma)
126+
self.bpod.session.current_trial.export()
112127

113128

114129
if __name__ == '__main__': # pragma: no cover

0 commit comments

Comments
 (0)