001package cnslab.cnsnetwork;
002import cnslab.cnsmath.*;
003import java.util.Map;
004import java.util.HashMap;
005import java.io.Serializable;
006import java.util.ArrayList;
007
008/**
009 * Used to count avalanch in the network
010 * 
011 * @author  Yi Dong
012 */
013public class AvalancheCounter implements Serializable,Transmissible
014{
015        public int IDcounter;
016        public int oldExp;
017        public int oldTrial;
018
019        AvalancheCounter(Experiment exp)
020        {
021                avalancheCounter  = new ArrayList< ArrayList< Map<String, Integer> > >(exp.subExp.length);
022                for(int i=0; i < exp.subExp.length; i++)
023                {
024                        ArrayList< Map<String, Integer> > tmp = new ArrayList<Map<String, Integer>>(exp.subExp[i].repetition);
025                        avalancheCounter.add(i,tmp);
026                        for(int j=0; j < exp.subExp[i].repetition; j++)
027                        {
028                                Map<String, Integer> tmp2 = new HashMap<String, Integer>();
029                                tmp.add(j,tmp2);
030                        }
031                }
032//              avalancheCounter  = new HashMap<String, Integer>();
033                IDcounter = 0;
034                oldExp=0;
035                oldTrial=0;
036        }
037
038//      public Map<String, Integer> avalancheCounter;
039        public ArrayList< ArrayList< Map<String, Integer> > > avalancheCounter;
040
041        public void clear()
042        {
043                avalancheCounter.clear();
044        }
045
046        /**
047         * 
048         *  
049         * @param anetwork
050         * @return IDcounter
051         */
052        public int getId(ANetwork anetwork)
053        {
054                if(anetwork.trialId != oldTrial || anetwork.subExpId != oldExp)
055                {
056                        IDcounter=0;
057                        oldTrial = anetwork.trialId;
058                        oldExp = anetwork.subExpId;
059                }
060                IDcounter++;
061                return IDcounter;
062        }
063
064        public void CountIt(ANetwork anetwork, int source, int id)
065        {
066                //anetwork.p.println("CountIt called!");
067                String key = "S"+source+",I"+id;
068                Integer tmpInt = avalancheCounter.get(anetwork.subExpId).get(anetwork.trialId).get(key);
069                if(tmpInt == null)
070                {
071                        avalancheCounter.get(anetwork.subExpId).get(anetwork.trialId).put(key, tmpInt = (new Integer(0)));
072                }
073                tmpInt = tmpInt + 1;
074                avalancheCounter.get(anetwork.subExpId).get(anetwork.trialId).put(key,tmpInt);
075        }
076}