import jass.render.*; import jass.engine.*; import jass.generators.*; import jass.neuron.*; public class IF1 { String[] names = {"g ","Vrev ","fIn ","Tref ","Tmem ","Vt ","Vrest "}; double[] val = {100, 20, 10, 2, 40, 10, 0}; double[] min = {0, -100, 0, 0, 1, .01, -20}; double[] max = {500, 100, 100, 40, 100, 10, 0}; int nbuttons = 2; IFNeuron ifNeuron; SourcePlayer sp1; Sine synapse; Probe p1; Probe p2; DelayUG ddd; //Constant synapse; //RandOutSquared synapse; //RandPulses synapse; Rectify rectify; float sw = 1; float vrev = 20; float pulseRate = 10; float srate = 2000.f; public class IF1Controller extends Controller { private IF1 if1; public IF1Controller(java.awt.Frame parent,boolean modal,int nsl,int nbut,IF1 if1) { super(parent,modal,nsl,nbut); this.if1 = if1; } public void onButton(int k) { switch(k) { case 0: if1.p1.off(); if1.p2.off(); break; case 1: if1.p1.on(); if1.p2.on(); break; } } public void onSlider(int k) { switch(k) { case 0: if1.sw = (float)this.val[k]; if1.ifNeuron.setSynapticWeight(0,if1.sw); break; case 1: if1.vrev = (float)this.val[k]; if1.ifNeuron.setSynapticReversalPotential(0,if1.vrev); break; case 2: if1.pulseRate = (float)this.val[k]; if1.synapse.setFrequency(pulseRate); //if1.synapse.setProbabilityPerSample(pulseRate/if1.srate); break; case 3: if1.ifNeuron.setTr((float)(this.val[k]/1000)); break; case 4: if1.ifNeuron.setTm((float)(this.val[k]/1000)); break; case 5: if1.ifNeuron.setVt((float)this.val[k]); break; case 6: if1.ifNeuron.setVr((float)this.val[k]); break; } } } public static void main (String args[]) throws SinkIsFullException { new IF1(args); } public IF1(String args[]) throws SinkIsFullException { int bufferSize = 32; int bufferSizeJavaSound = 1*1024; int nSyn = 1; float Tr=10f/1000f; // refractory time float Vt=10f; // threshold potential float V0=0; // resting potential float Vr=0; // reset potential float Tm=40f/1000f; // membrane decay time constant Tm = Rm*Cm, Rm and Cm drop out of the eq. if(args.length <0) { System.out.println("Usage: java IFNeuron "); return; } ddd = new DelayUG(1); ifNeuron = new IFNeuron(bufferSize, nSyn,srate,Vt,V0,Vr,Tr,Tm); synapse = new Sine(srate,bufferSize); rectify = new Rectify(bufferSize); p1 = new Probe(bufferSize,"in.m"); p2 = new Probe(bufferSize,"out.m"); sp1 = new SourcePlayer(bufferSize,bufferSizeJavaSound,srate); //synapse = new Constant(bufferSize); //synapse = new RandOutSquared(bufferSize); //synapse = new RandPulses(bufferSize); //synapse.setProbabilityPerSample(pulseRate/srate); // build graph rectify.addSource(synapse); p1.addSource(rectify); ifNeuron.addSource(p1); p2.addSource(ifNeuron); sp1.addSource(p2); synapse.setFrequency(pulseRate); ifNeuron.setSynapticReversalPotential(0,20); ifNeuron.setSynapticWeight(0,10f); p1.off(); p2.off(); IF1Controller a_controlPanel = new IF1Controller(new java.awt.Frame ("IF1"),false,val.length,nbuttons,this); a_controlPanel.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { sp1.stopPlaying(); try{ //sleep(500); } catch(Exception e3) { } System.exit(0); } }); a_controlPanel.setSliders(val,min,max,names); a_controlPanel.setButtonNames (new String[] {"Probe Off","Probe On"}); a_controlPanel.setVisible(true); a_controlPanel.onButton(0); sp1.start(); } }