/** * LongShortSignalToNoise.java * * @author Created by Omnicore CodeGuide */ package edu.sc.seis.sod.process.waveform; import java.util.LinkedList; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import edu.iris.Fissures.FissuresException; import edu.iris.Fissures.IfSeismogramDC.RequestFilter; import edu.iris.Fissures.model.TimeInterval; import edu.iris.Fissures.model.UnitImpl; import edu.iris.Fissures.network.ChannelImpl; import edu.iris.Fissures.seismogramDC.LocalSeismogramImpl; import edu.sc.seis.fissuresUtil.bag.LongShortStoN; import edu.sc.seis.fissuresUtil.bag.LongShortTrigger; import edu.sc.seis.fissuresUtil.cache.CacheEvent; import edu.sc.seis.sod.ConfigurationException; import edu.sc.seis.sod.CookieJar; import edu.sc.seis.sod.SodUtil; import edu.sc.seis.sod.Threadable; import edu.sc.seis.sod.status.StringTreeLeaf; public class LongShortSignalToNoise implements WaveformProcess, Threadable { public LongShortSignalToNoise(Element config) throws ConfigurationException { NodeList childNodes = config.getChildNodes(); Node node; for(int counter = 0; counter < childNodes.getLength(); counter++) { node = childNodes.item(counter); if(node instanceof Element) { Element element = (Element)node; if(element.getTagName().equals("longTime")) { longTime = SodUtil.loadTimeInterval(element); } else if(element.getTagName().equals("shortTime")) { shortTime = SodUtil.loadTimeInterval(element); } else if(element.getTagName().equals("delayTime")) { delayTime = SodUtil.loadTimeInterval(element); } else if(element.getTagName().equals("ratio")) { ratio = Float.parseFloat(SodUtil.getNestedText(element)); } } } sToN = new LongShortStoN(longTime, shortTime, ratio, delayTime); } public boolean isThreadSafe() { return true; } public WaveformResult accept(CacheEvent event, ChannelImpl channel, RequestFilter[] original, RequestFilter[] available, LocalSeismogramImpl[] seismograms, CookieJar cookieJar) throws Exception { LongShortTrigger[] triggers = calcTriggers(seismograms); boolean hasTriggers = triggers.length != 0; return new WaveformResult(seismograms, new StringTreeLeaf(this, hasTriggers)); } public LongShortTrigger[] calcTriggers(LocalSeismogramImpl[] seismograms) throws FissuresException { LinkedList out = new LinkedList(); for(int i = 0; i < seismograms.length; i++) { LongShortTrigger[] triggers = sToN.calcTriggers(seismograms[i]); for(int j = 0; j < triggers.length; j++) { out.add(triggers[j]); } } return (LongShortTrigger[])out.toArray(new LongShortTrigger[0]); } public String toString() { return "LongShortSignalToNoise"; } LongShortStoN sToN; TimeInterval longTime = new TimeInterval(100, UnitImpl.SECOND); TimeInterval shortTime = new TimeInterval(5, UnitImpl.SECOND); TimeInterval delayTime = (TimeInterval)shortTime.multiplyBy(2); float ratio; }