001 package cnslab.cnsnetwork; 002 003 /*********************************************************************** 004 * Neuron input event, contains input time, branch of synapses and id of 005 * presynaptic neuron. 006 * 007 * @version 008 * $Date: 2012-08-04 13:43:22 -0500 (Sat, 04 Aug 2012) $ 009 * $Rev: 104 $ 010 * $Author: croft $ 011 * @author 012 * Yi Dong 013 * @author 014 * David Wallace Croft 015 ***********************************************************************/ 016 public class InputEvent 017 implements Comparable<InputEvent>, Cloneable 018 //////////////////////////////////////////////////////////////////////// 019 //////////////////////////////////////////////////////////////////////// 020 { 021 022 /** time of the input event */ 023 public double time; 024 025 /** the branch data */ 026 public Branch branch; 027 028 /** the neuron which sends spike */ 029 public int from; 030 031 //////////////////////////////////////////////////////////////////////// 032 //////////////////////////////////////////////////////////////////////// 033 034 public InputEvent ( 035 final double time, 036 final Branch branch, 037 final int from ) 038 //////////////////////////////////////////////////////////////////////// 039 { 040 this.time = time; 041 042 this.branch = branch; 043 044 this.from = from; 045 } 046 047 //////////////////////////////////////////////////////////////////////// 048 //////////////////////////////////////////////////////////////////////// 049 050 @Override 051 public int compareTo ( final InputEvent arg0 ) 052 //////////////////////////////////////////////////////////////////////// 053 { 054 if ( time < (arg0).time ) 055 { 056 return -1; 057 } 058 else if (time > (arg0).time) 059 { 060 return 1; 061 } 062 else 063 { 064 if( from < (arg0).from ) 065 { 066 return -1; 067 } 068 else if ( from > (arg0).from) 069 { 070 return 1; 071 } 072 else 073 { 074 if (branch.delay < (arg0).branch.delay) 075 { 076 return -1; 077 } 078 else if (branch.delay > (arg0).branch.delay) 079 { 080 return 1; 081 } 082 else 083 { 084 final int 085 targetNeuronIndexThis 086 = branch.synapses [ 0 ].getTargetNeuronIndex ( ), 087 targetNeuronIndexOther 088 = arg0.branch.synapses [ 0 ].getTargetNeuronIndex ( ); 089 090 if ( targetNeuronIndexThis < targetNeuronIndexOther ) 091 { 092 return -1; 093 } 094 095 if ( targetNeuronIndexThis > targetNeuronIndexOther ) 096 { 097 return 1; 098 } 099 100 return 0; 101 } 102 } 103 } 104 } 105 106 @Override 107 public String toString ( ) 108 //////////////////////////////////////////////////////////////////////// 109 { 110 return new String ( 111 "time:" + time 112 + " from:" + from 113 + " branch:" + branch.synapses [ 0 ].toString ( ) 114 + " delay:" +branch.delay ); 115 } 116 117 @Override 118 public Object clone ( ) 119 //////////////////////////////////////////////////////////////////////// 120 { 121 InputEvent a1 = null; 122 123 try 124 { 125 a1 = ( InputEvent ) super.clone ( ); 126 } 127 catch ( final CloneNotSupportedException exception ) 128 { 129 System.err.println ( "Clone Abort." + exception ); 130 } 131 132 return a1; 133 } 134 135 //////////////////////////////////////////////////////////////////////// 136 //////////////////////////////////////////////////////////////////////// 137 }