diff --git a/src/main/java/org/gcube/contentmanagement/graphtools/utils/DateGuesser.java b/src/main/java/org/gcube/contentmanagement/graphtools/utils/DateGuesser.java index 6fb4919..61f1ab8 100644 --- a/src/main/java/org/gcube/contentmanagement/graphtools/utils/DateGuesser.java +++ b/src/main/java/org/gcube/contentmanagement/graphtools/utils/DateGuesser.java @@ -21,9 +21,11 @@ public class DateGuesser { System.out.println("pattern " + getPattern("prova")); System.out.println("pattern " + getPattern("9/26/2010 1:49:00")); System.out.println("pattern " + getPattern("0.99")); + System.out.println("pattern " + getPattern("01/25/2013 14:48")); c = convertDate("2009-05-12"); System.out.println("giorno " + c.get(Calendar.DAY_OF_MONTH) + " mese " + (c.get(Calendar.MONTH) + 1) + " anno " + c.get(Calendar.YEAR)); // Properties prop = new Properties(System.getProperties()); + // prop.list(System.out); } @@ -37,7 +39,7 @@ public class DateGuesser { } // private static final String[] formats = { "MM\\dd\\yyyy", "MM\\dd\\yy", "MM/dd/yy", "MM/dd/yyyy", "dd/MM/yy", "dd/MM/yyyy", "dd/MM/yyyy HH:mm:ss", "dd/MM/yy HH:mm:ss", "dd/MM/yyyy HH:mm:ss","MM/yy","MM/yyyy", "yyyy.MM.dd G 'at' HH:mm:ss z", "EEE, MMM d, ''yy", "h:mm a", "hh 'o''clock' a, zzzz", "K:mm a, z", "MM-dd-yy","MM-dd-yyyy", "dd-MMM-yy", "yyyy.MM.dd.HH.mm.ss", "E, dd MMM yyyy HH:mm:ss Z", "yyyyy.MMMMM.dd GGG hh:mm aaa", "EEE, d MMM yyyy HH:mm:ss Z", "yyMMddHHmmssZ", "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm","yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", "h:mm a", "yyyy"}; - private static final String[] formats = { "MM\\dd\\yyyy", "MM\\dd\\yy", "MM/dd/yy", "MM/dd/yyyy", "MM/yy", "MM/yyyy", "yyyy.MM.dd G 'at' HH:mm:ss z", "MM/dd/yyyy HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "EEE, MMM d, ''yy", "h:mm a", "hh 'o''clock' a, zzzz", "K:mm a, z", "MM-dd-yy", "MM-dd-yyyy", "dd-MMM-yy", "yyyy.MM.dd.HH.mm.ss", "E, dd MMM yyyy HH:mm:ss Z", "yyyyy.MMMMM.dd GGG hh:mm aaa", "EEE, d MMM yyyy HH:mm:ss Z", "yyMMddHHmmssZ", "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "MM/dd/yy KK:mm a", "MM/dd/yy KK:mm:ss a", "h:mm a", "yyyy", "s" }; + private static final String[] formats = { "MM\\dd\\yyyy", "MM\\dd\\yy", "MM/dd/yy", "MM/dd/yyyy", "MM/yy", "MM/yyyy", "yyyy.MM.dd G 'at' HH:mm:ss z", "MM/dd/yyyy HH:mm:ss", "MM/dd/yyyy HH:mm","dd/MM/yyyy HH:mm:ss", "EEE, MMM d, ''yy", "h:mm a", "hh 'o''clock' a, zzzz", "K:mm a, z", "MM-dd-yy", "MM-dd-yyyy", "dd-MMM-yy", "yyyy.MM.dd.HH.mm.ss", "E, dd MMM yyyy HH:mm:ss Z", "yyyyy.MMMMM.dd GGG hh:mm aaa", "EEE, d MMM yyyy HH:mm:ss Z", "yyMMddHHmmssZ", "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "MM/dd/yy KK:mm a", "MM/dd/yy KK:mm:ss a", "h:mm a", "yyyy", "s" }; private static final String[] formatiITA = { "dd\\MM\\yyyy", "dd\\MM\\yy", "dd/MM/yy", "dd/MM/yyyy", "dd/MM/yy", "dd/MM/yyyy", "dd/MM/yyyy HH:mm:ss", "dd/MM/yy HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "MM/yy", "MM/yyyy", "dd.MM.yyyy G 'alle' HH:mm:ss z", "EEE, MMM d, ''yy", "h:mm a", "hh a, zzzz", "K:mm a, z", "dd-MMM-yy", "dd.MM.yyyy.HH.mm.ss", "E, dd MMM yyyy HH:mm:ss Z", "yyyyy.MMMMM.dd GGG hh:mm aaa", "EEE, d MMM yyyy HH:mm:ss Z", "yyMMddHHmmssZ", "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "dd-MMM-yyyy HH:mm", "h:mm a", "yyyy" }; public static String getPattern(String data, String language) { diff --git a/src/main/java/org/gcube/dataanalysis/ecoengine/test/signalprocessing/TestSimpleSignal.java b/src/main/java/org/gcube/dataanalysis/ecoengine/test/signalprocessing/TestSimpleSignal.java index 46ddb52..e507aa7 100644 --- a/src/main/java/org/gcube/dataanalysis/ecoengine/test/signalprocessing/TestSimpleSignal.java +++ b/src/main/java/org/gcube/dataanalysis/ecoengine/test/signalprocessing/TestSimpleSignal.java @@ -13,10 +13,12 @@ public class TestSimpleSignal { // static AlgorithmConfiguration[] configs = {periodicSignalConfig(), russianSignalConfig(),simpleSignalConfig(), occurrencePointsSignalConfig(),hugeSignalConfig()}; - static AlgorithmConfiguration[] configs = {periodicSignalConfig(), russianSignalConfig(),simpleSignalConfig()}; + //static AlgorithmConfiguration[] configs = {periodicSignalConfig(), russianSignalConfig(),simpleSignalConfig()}; // static AlgorithmConfiguration[] configs = {NAFOSignalConfig()}; // static AlgorithmConfiguration[] configs = {largeCustomSignalConfig()}; // static AlgorithmConfiguration[] configs = {sawSignalConfig()}; + static AlgorithmConfiguration[] configs = {earthquakesSignalConfig()}; + public static void main(String[] args) throws Exception { @@ -252,4 +254,35 @@ public class TestSimpleSignal { } + public static AlgorithmConfiguration earthquakesSignalConfig() { + + AlgorithmConfiguration config = new AlgorithmConfiguration(); + config.setAgent("TIME_SERIES_PROCESSING"); + config.setConfigPath("./cfg/"); + config.setPersistencePath("./"); + config.setParam("DatabaseUserName", "utente"); + config.setParam("DatabasePassword", "d4science"); + config.setParam("DatabaseURL", "jdbc:postgresql://statistical-manager.d.d4science.research-infrastructures.eu/testdb"); + config.setParam("DatabaseDriver", "org.postgresql.Driver"); + // vessels + config.setParam("TimeSeriesTable", "timeseries_id0f44b131_de55_4839_b07f_2721574e2b9d"); + config.setParam("ValueColum", "magnitude"); + + + config.setParam("FrequencyResolution", "1"); + config.setParam("SSA_Window_in_Samples", "20"); + config.setParam("SSA_EigenvaluesThreshold", "0.7"); + config.setParam("SSA_Points_to_Forecast", "10"); + + AnalysisLogger.setLogger(config.getConfigPath() + AlgorithmConfiguration.defaultLoggerFile); + + config.setGcubeScope("/gcube"); + config.setConfigPath("./cfg"); + return config; + + } + + + + } diff --git a/src/main/java/org/gcube/dataanalysis/ecoengine/transducers/TimeSeriesAnalysis.java b/src/main/java/org/gcube/dataanalysis/ecoengine/transducers/TimeSeriesAnalysis.java index c91a1e2..47b6775 100644 --- a/src/main/java/org/gcube/dataanalysis/ecoengine/transducers/TimeSeriesAnalysis.java +++ b/src/main/java/org/gcube/dataanalysis/ecoengine/transducers/TimeSeriesAnalysis.java @@ -160,8 +160,16 @@ public class TimeSeriesAnalysis extends StandardLocalExternalAlgorithm { for (double v : ts.getValues()) { values.add(v); } - SSADataset ssa = SSAWorkflow.applyCompleteWorkflow(values, windowLength, eigenvaluespercthr, pointsToReconstruct, false); + Date[] newtimes = ts.extendTime(pointsToReconstruct); + SSADataset ssa = null; + if (windowLengthSSA analysis impossible to complete"); + outputParameters.put("SSA Note:", "The window length is higher than the signal length. Please reduce the value."); + return; + } AnalysisLogger.getLogger().debug("TimeSeriesAnalysis->SSA analysis completed"); status = 70; @@ -238,7 +246,7 @@ public class TimeSeriesAnalysis extends StandardLocalExternalAlgorithm { inputs.add(p1); addDoubleInput(frequencyResolution, "The precision in detecting the period. The lower this number the less the number of points in the Spectrogram (higher number of samples used at each step). Reducing this, the spectrogram will be finer and sharper, but you should tune it. Too many samples will make the Spectrogram noisy.", "1"); addEnumerateInput(AggregationFunctions.values(), aggregationFunction, "Function to apply to samples with the same time instant", AggregationFunctions.SUM.name()); - addIntegerInput(SSAAnalysisWindowSamples, "The number of samples in the produced uniformly sampled signal, to use in the SSA algorithm. This number should identify a portion of the signal long enough to make the system guess the nature of the trend", "20"); + addIntegerInput(SSAAnalysisWindowSamples, "The number of samples in the produced uniformly sampled signal, to use in the SSA algorithm. Must be less than the Time Series length. This number should identify a portion of the signal long enough to make the system guess the nature of the trend", "20"); addDoubleInput(SSAEigenvaluesThreshold, "The threshold under which an SSA eigenvalue will be ignored, along with its eigenvector, for the reconstruction of the signal", "0.7"); addIntegerInput(SSAPointsToForecast, "The number of points to forecast over the original length of the time series", "10"); DatabaseType.addDefaultDBPars(inputs);