package edu.sc.seis.sod.subsetter.eventStation;
import java.util.List;
import org.w3c.dom.Element;
import edu.iris.Fissures.IfEvent.Origin;
import edu.iris.Fissures.network.StationImpl;
import edu.sc.seis.TauP.Arrival;
import edu.sc.seis.TauP.TauModelException;
import edu.sc.seis.fissuresUtil.bag.TauPUtil;
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.status.StringTree;
import edu.sc.seis.sod.status.StringTreeLeaf;
/**
* sample xml
*
* <pre>
*
* <phaseExists>
* <modelName>prem</modelName>
* <phaseName>ttp</phaseName>
* </phaseExists>
*
* </pre>
*/
public class PhaseExists implements EventStationSubsetter {
public PhaseExists(Element config) throws ConfigurationException {
Element element = SodUtil.getElement(config, "modelName");
if(element != null) modelName = SodUtil.getNestedText(element);
element = SodUtil.getElement(config, "phaseName");
if(element != null) {
phaseName = SodUtil.getNestedText(element);
} else {
throw new ConfigurationException("Phase name not in configuration");
}
try {
tauPTime = TauPUtil.getTauPUtil(modelName);
} catch(TauModelException e) {
throw new ConfigurationException("Cannot initize TauP travel time calculator",
e);
}
}
public StringTree accept(CacheEvent event,
StationImpl station,
CookieJar cookieJar) throws Exception {
Origin origin = event.get_preferred_origin();
List<Arrival> arrivals = tauPTime.calcTravelTimes(station,
origin,
new String[] {phaseName});
if(getRequiredArrival(arrivals) == null) return new StringTreeLeaf(this, false);
else return new StringTreeLeaf(this, true);
}
public Arrival getRequiredArrival(List<Arrival> arrivals) {
Arrival requiredArrival = null;
for(int counter = 0; counter < arrivals.size(); counter++) {
String arrivalName = arrivals.get(counter).getName();
if(phaseName.startsWith("tt")) {
if(phaseName.equals("tts")
&& arrivalName.toUpperCase().startsWith("S")) {
requiredArrival = arrivals.get(counter);
} else if(phaseName.equals("ttp")
&& arrivalName.toUpperCase().startsWith("P")) {
requiredArrival = arrivals.get(counter);
}
} else if(phaseName.equals(arrivalName)) {
requiredArrival = arrivals.get(counter);
}
}
return requiredArrival;
}
protected TauPUtil tauPTime;
protected String modelName = "iasp91";
protected String phaseName;
}// PhaseExists