All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jdplus.toolkit.desktop.plugin.datatransfer.ts.TsCollectionAnalyser Maven / Gradle / Ivy

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jdplus.toolkit.desktop.plugin.datatransfer.ts;

import jdplus.toolkit.base.api.timeseries.Ts;
import jdplus.toolkit.base.api.timeseries.TsCollection;
import jdplus.toolkit.base.api.timeseries.TsData;
import jdplus.toolkit.base.api.timeseries.TsDataTable;
import jdplus.toolkit.base.api.timeseries.TsDomain;
import jdplus.toolkit.base.api.timeseries.util.ObsCharacteristics;
import jdplus.toolkit.base.api.timeseries.util.ObsGathering;
import jdplus.toolkit.base.api.timeseries.util.TsDataBuilder;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import jdplus.toolkit.base.core.math.matrices.FastMatrix;

/**
 *
 * @author Jean Palate
 */
class TsCollectionAnalyser {

    String[] titles;
    LocalDate[] dates;
    FastMatrix data;

    public List create() {
        if (titles == null || dates == null || data == null) {
            return null;
        }
        List coll = new ArrayList<>();
        for (int i = 0; i < titles.length; ++i) {
            TsDataBuilder cur = TsDataBuilder.byDate(ObsGathering.DEFAULT, ObsCharacteristics.ORDERED);
            for (int j = 0; j < dates.length; ++j) {
                double val = data.get(j, i);
                if (!Double.isNaN(val)) {
                    cur.add(dates[j], val);
                }
            }
            TsData data = cur.build();
            coll.add(Ts.of(titles[i], data));
        }
        return coll;
    }

    void set(TsCollection col, boolean begin) {
        dates = null;
        data = null;
        titles = new String[col.size()];

        TsDataTable table = TsDataTable.of(col, s -> s.getData());

        for (int i = 0; i < titles.length; ++i) {
            Ts cur = col.get(i);
            titles[i] = cur.getName();
        }

        TsDomain domain = table.getDomain();
        if (domain.isEmpty()) {
            dates = new LocalDate[0];
            data = FastMatrix.EMPTY;
            return;
        }
        dates = new LocalDate[domain.length()];
        for (int i = 0; i < dates.length; ++i) {
            if (begin) {
                dates[i] = domain.get(i).start().toLocalDate();
            } else {
                dates[i] = domain.get(i).end().toLocalDate().minusDays(1);
            }
        }
        data = FastMatrix.make(dates.length, titles.length);
        data.set(Double.NaN);
        TsDataTable.Cursor cursor = table.cursor(begin ? TsDataTable.DistributionType.FIRST : TsDataTable.DistributionType.LAST);
        for (int i = 0; i < dates.length; ++i) {
            for (int j = 0; j < titles.length; ++j) {
                cursor.moveTo(i, j);
                TsDataTable.ValueStatus status = cursor.getStatus();
                if (status == TsDataTable.ValueStatus.PRESENT) {
                    data.set(i, j, cursor.getValue());
                }
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy