teichmann@5831: package org.dive4elements.river.artifacts.model.sq; ingo@3072: teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; sascha@3552: teichmann@5831: import org.dive4elements.river.artifacts.FLYSArtifact; ingo@3072: teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; teichmann@5831: import org.dive4elements.river.artifacts.model.DataFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; ingo@3072: sascha@3552: import org.apache.log4j.Logger; ingo@3072: ingo@3072: /** ingo@3072: * Facet to show the curve in a sq relation. ingo@3072: * ingo@3072: * @author Ingo Weinzierl ingo@3072: */ ingo@3072: public class SQOutlierFacet extends DataFacet implements FacetTypes { ingo@3072: ingo@3072: private static final Logger log = Logger.getLogger(SQOutlierFacet.class); ingo@3072: ingo@3119: public static final int BITMASK_ITERATION = (1 << 16) - 1; ingo@3072: ingo@3101: private int fractionIdx; ingo@3079: ingo@3072: public SQOutlierFacet() { ingo@3072: } ingo@3072: ingo@3079: public SQOutlierFacet( ingo@3079: int idx, ingo@3101: int fractionIdx, ingo@3079: String name, ingo@3079: String description, ingo@3079: String hash, ingo@3079: String stateId ingo@3079: ) { ingo@3079: super(idx, name, description, ComputeType.ADVANCE, hash, stateId); ingo@3101: this.fractionIdx = fractionIdx; ingo@3072: } ingo@3072: ingo@3072: ingo@3072: @Override ingo@3072: public Object getData(Artifact artifact, CallContext context) { ingo@3072: log.debug("SQOutlierFacet.getData"); ingo@3079: sascha@3552: if (!(artifact instanceof FLYSArtifact)) { sascha@3552: return null; ingo@3079: } ingo@3072: sascha@3552: FLYSArtifact flys = (FLYSArtifact) artifact; sascha@3552: sascha@3552: CalculationResult res = (CalculationResult) flys.compute( sascha@3552: context, ComputeType.ADVANCE, false); sascha@3552: sascha@3552: int idx = this.index >> 16; sascha@3552: int iter = this.index & BITMASK_ITERATION; sascha@3552: sascha@3552: boolean debug = log.isDebugEnabled(); sascha@3552: sascha@3552: if (debug) { sascha@3552: log.debug("Fetch data for index : " + this.index); sascha@3552: log.debug(" > index: " + idx); sascha@3552: log.debug(" > fraction: " + fractionIdx); sascha@3552: log.debug(" > iteration: " + iter); sascha@3552: } sascha@3552: sascha@3552: SQResult[] result = (SQResult[]) res.getData(); sascha@3552: SQFractionResult fResult = result[idx].getFraction(fractionIdx); sascha@3552: sascha@3552: if (fResult == null) { sascha@3552: log.warn("No SQFractionResult at " + idx + "|" + fractionIdx); sascha@3552: return null; sascha@3552: } sascha@3552: sascha@3552: SQ [] outliers = fResult.getOutliers(iter); sascha@3552: sascha@3552: if (debug) { sascha@3552: int num = outliers != null ? outliers.length : 0; sascha@3552: log.debug("Found " + num + " outliers for iteration " + iter); sascha@3552: } sascha@3552: sascha@3552: return outliers; ingo@3072: } ingo@3072: ingo@3072: ingo@3072: @Override ingo@3072: public SQOutlierFacet deepCopy() { ingo@3072: SQOutlierFacet copy = new SQOutlierFacet(); ingo@3072: copy.set(this); ingo@3072: ingo@3072: return copy; ingo@3072: } ingo@3072: } ingo@3072: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :