package net.seninp.tinker; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.seninp.jmotif.sax.NumerosityReductionStrategy; import net.seninp.jmotif.sax.TSProcessor; import net.seninp.jmotif.sax.discord.DiscordRecord; import net.seninp.jmotif.sax.discord.DiscordRecords; import net.seninp.jmotif.sax.discord.HOTSAXImplementation; public class PaperDiscordFinderHOTSAX { private static final String IN_DATA = "RCode/TKDD/sine_5anomalies_rwalk_04noise.txt"; private static final String IN_PARAMS = "RCode/TKDD/sine_5anomalies_rwalk_04noise_sampler_out.txt"; private static final Logger LOGGER = LoggerFactory.getLogger(PaperDiscordFinderHOTSAX.class); private static final String COMMA = ","; private static final String CR = "\n"; public static void main(String[] args) throws Exception { double[] ts = TSProcessor.readFileColumn(IN_DATA, 0, 0); LOGGER.info("read " + ts.length + " points from " + IN_DATA); BufferedWriter bw = new BufferedWriter( new FileWriter(new File("RCode/TKDD/sine_5anomalies_hotsax_rwalk_04noise_discord_res_10.txt"))); BufferedReader br = new BufferedReader(new FileReader(new File(IN_PARAMS))); String line = null; while ((line = br.readLine()) != null) { String[] split = line.trim().split(","); Integer WIN = Integer.valueOf(split[2]); Integer PAA = 3; Integer ALP = 3; StringBuilder logStr = new StringBuilder(); logStr.append(WIN).append(COMMA); logStr.append(PAA).append(COMMA); logStr.append(ALP).append(COMMA); // // ************************ // // run HOTSAX with this intervals set // DiscordRecords discords = HOTSAXImplementation.series2Discords(ts, 10, WIN, PAA, ALP, NumerosityReductionStrategy.NONE, 0.01); // // ************************ // // // let's see the discords... int[] discordsFound = { 0, 0, 0, 0, 0 }; ArrayList<Interval> discordIntervals = new ArrayList<Interval>(); // discord #1 Interval i = new Interval(205, 217); discordIntervals.add(i); // discord #2 i = new Interval(360, 392); discordIntervals.add(i); // discord #3 i = new Interval(726, 740); discordIntervals.add(i); // discord #4 i = new Interval(500, 545); discordIntervals.add(i); // discord #5 i = new Interval(1081, 1095); discordIntervals.add(i); for (DiscordRecord discord : discords) { int pos = discord.getPosition(); int len = discord.getLength(); System.out.println(len); Interval di = new Interval(pos, pos + len); for (int intIdx = 0; intIdx < discordIntervals.size(); intIdx++) { Interval interval = discordIntervals.get(intIdx); if (interval.intersects(di)) { discordsFound[intIdx] = discordsFound[intIdx] + 1; } } } for (int j = 0; j < discordsFound.length; j++) { logStr.append(discordsFound[j]).append(","); } logStr.delete(logStr.length() - 1, logStr.length()); bw.write(logStr.toString() + CR); } br.close(); bw.close(); } }