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    }