package edu.sc.seis.sod.process.waveform; import java.util.LinkedList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import edu.iris.Fissures.FissuresException; import edu.iris.Fissures.IfSeismogramDC.RequestFilter; import edu.iris.Fissures.model.MicroSecondDate; import edu.iris.Fissures.network.ChannelImpl; import edu.iris.Fissures.seismogramDC.LocalSeismogramImpl; import edu.sc.seis.fissuresUtil.bag.Cut; import edu.sc.seis.fissuresUtil.cache.CacheEvent; import edu.sc.seis.sod.ConfigurationException; import edu.sc.seis.sod.CookieJar; import edu.sc.seis.sod.status.StringTreeLeaf; import edu.sc.seis.sod.subsetter.requestGenerator.PhaseRequest; /** * Cuts seismograms relative to phases. Created: Wed Nov 6 17:58:10 2002 * * @author <a href="mailto:crotwell@seis.sc.edu">Philip Crotwell </a> * @version $Id: PhaseCut.java 22054 2011-02-16 16:51:38Z crotwell $ */ public class PhaseCut implements WaveformProcess { public PhaseCut(Element config) throws ConfigurationException { this.config = config; // use existing PhaseRequest class to calculate phase times phaseRequest = new PhaseRequest(config); } public PhaseCut(PhaseRequest phaseRequest) throws ConfigurationException { this.phaseRequest = phaseRequest; } /** * Cuts the seismograms based on phase arrivals. */ public WaveformResult accept(CacheEvent event, ChannelImpl channel, RequestFilter[] original, RequestFilter[] available, LocalSeismogramImpl[] seismograms, CookieJar cookieJar) throws Exception { RequestFilter[] cutRequest = phaseRequest.generateRequest(event, channel, cookieJar); LocalSeismogramImpl[] cutSeis = cut(seismograms, cutRequest); return new WaveformResult(cutSeis, new StringTreeLeaf(this, cutSeis.length != 0)); } public static LocalSeismogramImpl[] cut(LocalSeismogramImpl[] seismograms, RequestFilter[] cuts) throws FissuresException { List cutSeis = new LinkedList(); for(int i = 0; i < cuts.length; i++) { Cut cut = new Cut(new MicroSecondDate(cuts[i].start_time), new MicroSecondDate(cuts[i].end_time)); for(int j = 0; j < seismograms.length; j++) { // cut returns null if the time interval doesn't overlap LocalSeismogramImpl tempSeis = cut.apply(seismograms[j]); if(tempSeis != null) { cutSeis.add(tempSeis); } } // end of for (int i=0; i<seismograms.length; i++) } return (LocalSeismogramImpl[])cutSeis.toArray(new LocalSeismogramImpl[0]); } Element config; PhaseRequest phaseRequest; private static Logger logger = LoggerFactory.getLogger(PhaseRequest.class.getName()); }// PhaseCut