protected virtual void OnCellGrowthEvent(EventArgs_CellGrowth e)
        {
            EventHandler <EventArgs_CellGrowth> handler = CellGrowthEvent;

            if (handler != null)
            {
                handler(this, e);
            }
        }
        //CellGrowthEvent code
        public void RaiseCellGrowthEvent(DateTime when) //tested
        {
            //action within the cell
            List <Dendrite> added = AddDendrites(numDendritesToAddInGrowthEvent, growthEventDendriteTypesList);

            //reset neuron state
            SetNoGrowthState();

            //event
            Console.WriteLine("Neuron raises cell growth event.");
            EventArgs_CellGrowth args = new EventArgs_CellGrowth(when, added);

            OnCellGrowthEvent(args);
        }
        private static void RespondToCellGrowthEvent(object sender, EventArgs_CellGrowth e)
        {
            Console.WriteLine("ProcessManager received cell growth event.");
            List <Dendrite> added = e.DendritesAdded;

            //add Tasks to manipulate dendrites added
            //====================================================================//
            //                             dendrite                               //
            //====================================================================//
            //Consumers to retrieve neurotransmitters from dendrite buffer
            for (int i = 0; i < NUM_DENDRITE_CONSUMERS; i++)
            {
                Task newest = Task.Factory.StartNew((val) =>
                {
                    int id = (int)val;
                    new Task_Dendrite(id, runLength, added[0], neuron.Body, start).Consume();
                }, nextDendriteTaskId++);
                tasks.Add(newest);
            }

            //Producers to send electrical potential to cell body buffer
            for (int i = 0; i < NUM_DENDRITE_PRODUCERS; i++)
            {
                Task newest = Task.Factory.StartNew((val) =>
                {
                    int id = (int)val;
                    new Task_Dendrite(id, runLength, added[0], neuron.Body, start).Produce();
                }, nextDendriteTaskId++);
                tasks.Add(newest);
            }

            //Decayers to decay membrane potential of dendrites
            for (int i = 0; i < NUM_DENDRITE_DECAYERS; i++)
            {
                Task newest = Task.Factory.StartNew((val) =>
                {
                    int id = (int)val;
                    new Task_Dendrite(id, runLength, added[0], neuron.Body, start).Decay();
                }, nextDendriteTaskId++);
                tasks.Add(newest);
            }



            //add Tasks to produce to dendrites added
            //====================================================================//
            //                               input                                //
            //====================================================================//
            //Producers to send neurotransmitters to dendrites
            for (int i = 0; i < NUM_INPUTAXON_PRODUCERS; i++)
            {
                Task newest = Task.Factory.StartNew((val) =>
                {
                    int id         = (int)val;
                    InputAxon axon = new InputAxon(nextInputAxonId++, INPUTAXON_PRODUCTION_FREQUENCY, 0);
                    inputs.Add(axon);
                    new Task_InputAxon(id, runLength, axon, INPUT_MAGNITUDE, start, added[0]).Produce();
                }, nextInputAxonTaskId++);
                tasks.Add(newest);
            }
        }