001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Apr 24, 2003 005 * Time: 9:56:40 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 PhaseEntityTrigger { 021 private UnorderedUnlimitedSet trigger; 022 private int state[]; 023 private final int triggerFound = 1; 024 025 public PhaseEntityTrigger() { 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 for (int i=0; i<data.size(); i++) { 054 UnorderedUnlimitedSet current = (UnorderedUnlimitedSet)data.get(i); 055 056 if (((float)current.intersection(trigger).size())/((float)trigger.size()) >= threshold ) { 057 state[i] = triggerFound; 058 } 059 } 060 061 int previous = state[0], noise = 0; 062 for (int i=1; i<state.length; i++) { 063 if (state[i] != previous) { 064 noise ++; 065 if (noise > noiseTolerance) { 066 if (previous == triggerFound) 067 phase.add(new Integer(i-noise)); 068 else 069 phase.add(new Integer(i-noise+1)); 070 noise = 0; 071 previous = state[i]; 072 } 073 } else { 074 noise = 0; 075 } 076 } 077 /*int noise = 0; 078 for (int i=0; i<state.length; i++) { 079 if (state[i] == triggerFound) { 080 noise ++; 081 if (noise > noiseTolerance) { 082 phase.add(new Integer(i-noise+1)); 083 noise = 0; 084 } 085 } else { 086 noise = 0; 087 } 088 }*/ 089 090 return phase; 091 } 092 }