001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: May 17, 2003 005 * Time: 8:29:55 PM 006 */ 007 008 package EVolve.util.phasedetectors; 009 010 import java.util.ArrayList; 011 import java.util.HashMap; 012 013 import EVolve.Scene; 014 import EVolve.data.Entity; 015 import EVolve.data.Selection; 016 import EVolve.util.equators.UnorderedUnlimitedSet; 017 import EVolve.visualization.ReferenceDimension; 018 import EVolve.visualization.XYViz.ValRefViz.HotSpotViz.HotSpotVisualization; 019 020 public class PhaseEntitySet { 021 private UnorderedUnlimitedSet trigger; 022 private int state[]; 023 private final int setFound = 1; 024 025 public PhaseEntitySet() { 026 } 027 028 public ArrayList gatherTiggeredPhase(ArrayList data, int noiseTolerance, float threshold) { 029 ArrayList phase = new ArrayList(); 030 Selection activeSelection = Scene.getFilter().getActiveSelection(); 031 032 if (activeSelection == null) { 033 Scene.showErrorMessage("No active selection."); 034 return phase; 035 } 036 037 state = new int[data.size()]; 038 for (int i=0; i<state.length; i++) { 039 state[i] = 0; 040 } 041 042 HotSpotVisualization visual = (HotSpotVisualization)Scene.getVisualizationManager().getActiveVisualization(); 043 HashMap entityName2Int = ((ReferenceDimension)visual.getDimension()[1]).getEntityName2IntMap(); 044 trigger = new UnorderedUnlimitedSet(); 045 046 Entity[] entities = activeSelection.getSelected(); 047 for (int i=0; i<entities.length; i++) { 048 int mappedId = ((Integer)entityName2Int.get(entities[i].getName())).intValue(); 049 trigger.addElement(mappedId); 050 } 051 052 053 //float rates[] = new float[data.size()]; 054 int previous = 0; 055 for (int i=0; i<data.size(); i++) { 056 UnorderedUnlimitedSet current = (UnorderedUnlimitedSet)data.get(i); 057 float rate = ((float)current.intersection(trigger).size())/(float)trigger.size();//((float)union.union(current).size()); 058 if (rate >= threshold ) { 059 state[i] = setFound; 060 } else { 061 if (rate == 0) { 062 state[i] = 0; 063 } else { 064 state[i] = previous; 065 } 066 } 067 previous = state[i]; 068 } 069 070 previous = state[0]; 071 int noise = 0; 072 for (int i=1; i<state.length; i++) { 073 if (state[i] != previous) { 074 noise ++; 075 if (noise > noiseTolerance) { 076 if (previous == setFound) 077 phase.add(new Integer(i-noise+1)); 078 previous = state[i]; 079 noise = 0; 080 } else { 081 if (state[i] == setFound) { 082 phase.add(new Integer(i)); 083 previous = setFound; 084 noise = 0; 085 } 086 } 087 } else { 088 noise = 0; 089 } 090 } 091 092 return phase; 093 } 094 }