function output_trains=generate_train(OVSF,output_channel_to_presynaptic) %this file can be used to generate a new randomesque output train for each trial %the max and min IPI variables called here are set in the main program global sampling_duration global sampling_rate global samples_per_ms global samples_per_trigger global num_stim_pulses_presyn %determined by count_pulses.m, which finds the first max_IPI to be zero global num_stim_pulses_postsyn %determined by count_pulses.m global pulse_duration global samples_per_pulse global halfsecond %global OVSF %global output_train %the output stimulus, generated by this m-file %global output_channel_to_presynaptic %set in main program -- when =2, flips outputs such that presynaptic pulse stimuli go to microelectrode channel 2 rather than channel 1 %global output_trains %generated below global max_IPIa %set in the main program global min_IPIa global max_IPIb global min_IPIb global max_IPIc global min_IPIc global max_IPId global min_IPId global max_IPIe global min_IPIe global max_IPIf global min_IPIf global max_IPIg global min_IPIg global max_IPIh global min_IPIh global max_IPIi global min_IPIi global postsyn_pulse_stim_1 %set in the main program global postsyn_pulse_stim_2 global postsyn_pulse_stim_3 global postsyn_pulse_stim_4 global postsyn_pulse_stim_5 if num_stim_pulses_presyn==1 tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==2 IPIa=build_interval(max_IPIa,min_IPIa) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==3 IPIa=build_interval(max_IPIa,min_IPIa) IPIb=build_interval(max_IPIb,min_IPIb) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa)+(IPIb))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(IPIb,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==4 IPIa=build_interval(max_IPIa,min_IPIa) IPIb=build_interval(max_IPIb,min_IPIb) IPIc=build_interval(max_IPIc,min_IPIc) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa)+(IPIb)+(IPIc))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(IPIb,1),ones(samples_per_pulse,1),zeros(IPIc,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==5 IPIa=build_interval(max_IPIa,min_IPIa) IPIb=build_interval(max_IPIb,min_IPIb) IPIc=build_interval(max_IPIc,min_IPIc) IPId=build_interval(max_IPId,min_IPId) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa)+(IPIb)+(IPIc)+(IPId))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(IPIb,1),ones(samples_per_pulse,1),zeros(IPIc,1),ones(samples_per_pulse,1),zeros(IPId,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==6 IPIa=build_interval(max_IPIa,min_IPIa) IPIb=build_interval(max_IPIb,min_IPIb) IPIc=build_interval(max_IPIc,min_IPIc) IPId=build_interval(max_IPId,min_IPId) IPIe=build_interval(max_IPIe,min_IPIe) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa)+(IPIb)+(IPIc)+(IPId)+(IPIe))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(IPIb,1),ones(samples_per_pulse,1),zeros(IPIc,1),ones(samples_per_pulse,1),zeros(IPId,1),ones(samples_per_pulse,1),zeros(IPIe,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==7 IPIa=build_interval(max_IPIa,min_IPIa) IPIb=build_interval(max_IPIb,min_IPIb) IPIc=build_interval(max_IPIc,min_IPIc) IPId=build_interval(max_IPId,min_IPId) IPIe=build_interval(max_IPIe,min_IPIe) IPIf=build_interval(max_IPIf,min_IPIf) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa)+(IPIb)+(IPIc)+(IPId)+(IPIe)+(IPIf))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(IPIb,1),ones(samples_per_pulse,1),zeros(IPIc,1),ones(samples_per_pulse,1),zeros(IPId,1),ones(samples_per_pulse,1),zeros(IPIe,1),ones(samples_per_pulse,1),zeros(IPIf,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==8 IPIa=build_interval(max_IPIa,min_IPIa) IPIb=build_interval(max_IPIb,min_IPIb) IPIc=build_interval(max_IPIc,min_IPIc) IPId=build_interval(max_IPId,min_IPId) IPIe=build_interval(max_IPIe,min_IPIe) IPIf=build_interval(max_IPIf,min_IPIf) IPIg=build_interval(max_IPIg,min_IPIg) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa)+(IPIb)+(IPIc)+(IPId)+(IPIe)+(IPIf)+(IPIg))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(IPIb,1),ones(samples_per_pulse,1),zeros(IPIc,1),ones(samples_per_pulse,1),zeros(IPId,1),ones(samples_per_pulse,1),zeros(IPIe,1),ones(samples_per_pulse,1),zeros(IPIf,1),ones(samples_per_pulse,1),zeros(IPIg,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==9 IPIa=build_interval(max_IPIa,min_IPIa) IPIb=build_interval(max_IPIb,min_IPIb) IPIc=build_interval(max_IPIc,min_IPIc) IPId=build_interval(max_IPId,min_IPId) IPIe=build_interval(max_IPIe,min_IPIe) IPIf=build_interval(max_IPIf,min_IPIf) IPIg=build_interval(max_IPIg,min_IPIg) IPIh=build_interval(max_IPIh,min_IPIh) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa)+(IPIb)+(IPIc)+(IPId)+(IPIe)+(IPIf)+(IPIg)+(IPIh))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(IPIb,1),ones(samples_per_pulse,1),zeros(IPIc,1),ones(samples_per_pulse,1),zeros(IPId,1),ones(samples_per_pulse,1),zeros(IPIe,1),ones(samples_per_pulse,1),zeros(IPIf,1),ones(samples_per_pulse,1),zeros(IPIg,1),ones(samples_per_pulse,1),zeros(IPIh,1),ones(samples_per_pulse,1),zeros(tailend,1)); elseif num_stim_pulses_presyn==10 IPIa=build_interval(max_IPIa,min_IPIa) IPIb=build_interval(max_IPIb,min_IPIb) IPIc=build_interval(max_IPIc,min_IPIc) IPId=build_interval(max_IPId,min_IPId) IPIe=build_interval(max_IPIe,min_IPIe) IPIf=build_interval(max_IPIf,min_IPIf) IPIg=build_interval(max_IPIg,min_IPIg) IPIh=build_interval(max_IPIh,min_IPIh) IPIi=build_interval(max_IPIi,min_IPIi) tailend=(samples_per_trigger-(halfsecond+(samples_per_pulse*num_stim_pulses_presyn)+(IPIa)+(IPIb)+(IPIc)+(IPId)+(IPIe)+(IPIf)+(IPIg)+(IPIh)+(IPIi))); dtrain1=cat(1,zeros(halfsecond,1),ones(samples_per_pulse,1),zeros(IPIa,1),ones(samples_per_pulse,1),zeros(IPIb,1),ones(samples_per_pulse,1),zeros(IPIc,1),ones(samples_per_pulse,1),zeros(IPId,1),ones(samples_per_pulse,1),zeros(IPIe,1),ones(samples_per_pulse,1),zeros(IPIf,1),ones(samples_per_pulse,1),zeros(IPIg,1),ones(samples_per_pulse,1),zeros(IPIh,1),ones(samples_per_pulse,1),zeros(IPIi,1),ones(samples_per_pulse,1),zeros(tailend,1)); end dtrain1(3000:3099)=-1/(4*OVSF); %assuming Multiclamp Commander is set at 20mv/V, this will give a hyperpolarizing pulse of -5mv from %the 300th to the 309th millisecond inclusive train_pre=OVSF*dtrain1; %making the pulse train for the postsynaptic neuron %note that postsynaptic timing (relative to presynaptic) may be problematic until the timing of input and output can be resolved %the pulse train will be in the output train from the assigned time + one sample to the assigned time + a pulse's worth of samples %example: if the pulse is set for 600ms, sampling 10kHz, and pulse_duration 1ms, the pulse will last from samples 6001-6010, inclusive %this keeps it consistent with the presynaptic pulses train_post=repmat(0,samples_per_trigger,1); if postsyn_pulse_stim_1 train_post(((postsyn_pulse_stim_1*samples_per_ms)+1):((postsyn_pulse_stim_1*samples_per_ms)+samples_per_pulse))=1; end if postsyn_pulse_stim_2 train_post(((postsyn_pulse_stim_2*samples_per_ms)+1):((postsyn_pulse_stim_2*samples_per_ms)+samples_per_pulse))=1; end if postsyn_pulse_stim_3 train_post(((postsyn_pulse_stim_3*samples_per_ms)+1):((postsyn_pulse_stim_3*samples_per_ms)+samples_per_pulse))=1; end if postsyn_pulse_stim_4 train_post(((postsyn_pulse_stim_4*samples_per_ms)+1):((postsyn_pulse_stim_4*samples_per_ms)+samples_per_pulse))=1; end if postsyn_pulse_stim_5 train_post(((postsyn_pulse_stim_5*samples_per_ms)+1):((postsyn_pulse_stim_5*samples_per_ms)+samples_per_pulse))=1; end train_post=OVSF*train_post; %size(train_pre) %size(train_post) output_trains=[train_pre train_post]; if output_channel_to_presynaptic==2 %switching things around when the presynaptic neuron is patched through the second output channel output_trains=fliplr(output_trains); end %train_spritz is the train determining when the picospritzer is picospritzing %train_cam is the train determining when the camera shutter is gated