package edu.sc.seis.sod.subsetter.requestGenerator;
import org.w3c.dom.Element;
import edu.iris.Fissures.IfEvent.EventAccessOperations;
import edu.iris.Fissures.IfNetwork.Channel;
import edu.iris.Fissures.IfSeismogramDC.RequestFilter;
import edu.iris.Fissures.model.TimeInterval;
import edu.iris.Fissures.network.ChannelImpl;
import edu.sc.seis.TauP.TauModelException;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.fissuresUtil.display.configuration.DOMHelper;
import edu.sc.seis.sod.ConfigurationException;
import edu.sc.seis.sod.CookieJar;
import edu.sc.seis.sod.SodUtil;
public class PhaseRequest implements RequestGenerator {
public PhaseRequest(Element config) throws ConfigurationException {
String model = DOMHelper.extractText(config, "model", "prem");
String beginPhase = DOMHelper.extractText(config, "beginPhase");
String endPhase = DOMHelper.extractText(config, "endPhase");
TimeInterval beginOffset = null;
TimeInterval endOffset;
double beginOffsetRatio = 1;
double endOffsetRatio;
TimeInterval beginOffsetRatioMinimum = null;
TimeInterval endOffsetRatioMinimum;
boolean negateBeginOffsetRatio = false, negateEndOffsetRatio = false;
Element beginEl = DOMHelper.extractElement(config, "beginOffset");
if(DOMHelper.hasElement(beginEl, "ratio")) {
beginOffsetRatio = DOMHelper.extractDouble(beginEl, "ratio", 1.0);
beginOffsetRatioMinimum = SodUtil.loadTimeInterval(DOMHelper.getElement(beginEl,
"minimum"));
if(DOMHelper.hasElement(beginEl, "negative")) {
negateBeginOffsetRatio = true;
}
} else {
beginOffset = SodUtil.loadTimeInterval(beginEl);
}
try {
Element endEl = DOMHelper.extractElement(config, "endOffset");
if(DOMHelper.hasElement(endEl, "ratio")) {
endOffsetRatio = DOMHelper.extractDouble(endEl, "ratio", 1.0);
endOffsetRatioMinimum = SodUtil.loadTimeInterval(DOMHelper.getElement(endEl,
"minimum"));
if(DOMHelper.hasElement(endEl, "negative")) {
negateEndOffsetRatio = true;
}
if(beginOffset != null) {
phaseReq = new edu.sc.seis.fissuresUtil.bag.PhaseRequest(beginPhase,
beginOffset,
endPhase,
endOffsetRatio,
endOffsetRatioMinimum,
negateEndOffsetRatio,
model);
} else {
phaseReq = new edu.sc.seis.fissuresUtil.bag.PhaseRequest(beginPhase,
beginOffsetRatio,
beginOffsetRatioMinimum,
negateBeginOffsetRatio,
endPhase,
endOffsetRatio,
endOffsetRatioMinimum,
negateEndOffsetRatio,
model);
}
} else {
endOffset = SodUtil.loadTimeInterval(endEl);
if(beginOffset != null) {
phaseReq = new edu.sc.seis.fissuresUtil.bag.PhaseRequest(beginPhase,
beginOffset,
endPhase,
endOffset,
model);
} else {
phaseReq = new edu.sc.seis.fissuresUtil.bag.PhaseRequest(beginPhase,
beginOffsetRatio,
beginOffsetRatioMinimum,
negateBeginOffsetRatio,
endPhase,
endOffset,
model);
}
}
} catch(TauModelException e) {
throw new ConfigurationException("Problem with TauPUtil.", e);
}
}
public PhaseRequest(String beginPhase,
TimeInterval beginOffset,
String endPhase,
TimeInterval endOffset,
String model) throws TauModelException {
phaseReq = new edu.sc.seis.fissuresUtil.bag.PhaseRequest(beginPhase, beginOffset, endPhase, endOffset, model);
}
public RequestFilter[] generateRequest(CacheEvent event,
ChannelImpl channel,
CookieJar jar) throws Exception {
RequestFilter rf = generateRequest(event, channel);
if(rf == null) {
return new RequestFilter[0];
}
return new RequestFilter[] {rf};
}
public RequestFilter generateRequest(EventAccessOperations event,
Channel channel) throws Exception {
return phaseReq.generateRequest(event, channel);
}
public edu.sc.seis.fissuresUtil.bag.PhaseRequest getPhaseReq() {
return phaseReq;
}
private edu.sc.seis.fissuresUtil.bag.PhaseRequest phaseReq;
}// PhaseRequest