package context.apps.demos.homeactivity; import java.io.File; import java.util.List; import be.ac.ulg.montefiore.run.jahmm.ObservationVector; import context.apps.demos.homeactivity.SensorsWidget.SensorsData; import context.arch.discoverer.component.ClassnameElement; import context.arch.discoverer.query.RuleQueryItem; import context.arch.enactor.Generator; import context.arch.intelligibility.hmm.HmmSupervisedLearner; public class SensorsGenerator extends Generator { private List<ObservationVector> allObservations; private final int sequenceLength = HomeModel.SEQUENCE_LENGTH; // default public SensorsGenerator() { super( RuleQueryItem.instance(new ClassnameElement(SensorsWidget.class)), "Sensors", ""); /* * Preset dataset */ String obsFilename = "demos/home-hmm/kasteren-jahmm-observations-test.seq"; allObservations = HmmSupervisedLearner.readObservationsSequencesFromFile(new File(obsFilename), SensorsWidget.FEATURES.length); start(); } public int numObservations() { return allObservations.size(); } /** * * @return T, the sequence length for observations */ public int getSequenceLength() { return sequenceLength; } /** * Since SensorsWidget stores sequential historical information, this is sequence sensitive. * @param t some number from range from 0 to #numObservations() * @return true if the update was successful */ public boolean setTimeStep(int t) { if (t > numObservations()) { return false; } // out of bounds // load instance from dataset // List<ObservationVector> observations = allObservations.subList(t, t + sequenceLength); ObservationVector observation = allObservations.get(t); System.out.println("setTimeStep observation = " + observation); /* * Set data values */ SensorsData data = new SensorsData(System.currentTimeMillis()); observationToArray(observation, data.featureValues); // put data into widget // System.out.println("setTimeStep data.toAttributes() = " + data.toAttributes()); updateOutWidget(data); return true; } /** * * @param observations * @param featureValues [ActivityEnactor.SEQUENCE_LENGTH][SensorsWidget.FEATURES.length] */ public static void observationToArray(ObservationVector observation, final int[] featureValues) { for (int i = 0; i < featureValues.length; i++) { featureValues[i] = (int)observation.value(i); } } }