package edu.sc.seis.sod.velocity.network;
import java.util.ArrayList;
import java.util.List;
import org.apache.velocity.VelocityContext;
import edu.iris.Fissures.Location;
import edu.iris.Fissures.IfEvent.EventAccessOperations;
import edu.iris.Fissures.IfNetwork.Channel;
import edu.iris.Fissures.IfNetwork.ChannelId;
import edu.sc.seis.fissuresUtil.cache.EventUtil;
import edu.sc.seis.fissuresUtil.hibernate.ChannelGroup;
public class VelocityChannelGroup {
public VelocityChannelGroup( ChannelGroup wrapped) {
this.wrapped = wrapped;
}
public List<VelocityChannel> getChannels() {
List<VelocityChannel> out = new ArrayList<VelocityChannel>();
for (int i = 0; i < wrapped.getChannels().length; i++) {
out.add(new VelocityChannel(wrapped.getChannels()[i]));
}
return out;
}
public boolean contains(Channel c) {
return wrapped.contains(c);
}
/**
* Finds the vertical channel. If no channel has a dip of -90 then null is
* returned.
*/
public VelocityChannel getVertical() {
if (wrapped.getVertical() != null) {
return new VelocityChannel(wrapped.getVertical());
}
return null;
}
/**
* Finds the 2 horizontal channels.
*/
public List<VelocityChannel> getHorizontal() {
List<VelocityChannel> out = new ArrayList<VelocityChannel>();
for (int i = 0; i < wrapped.getHorizontal().length; i++) {
out.add(new VelocityChannel(wrapped.getHorizontal()[i]));
}
return out;
}
/**
* Gets the horizontals as X and Y, so that the first channel's azimuth is
* the seconds + 90 degrees, ie x == east and y == north. If this is not possible, then a zero length
* array is returned.
*/
public List<VelocityChannel> getHorizontalXY() {
List<VelocityChannel> out = new ArrayList<VelocityChannel>();
for (int i = 0; i < wrapped.getHorizontalXY().length; i++) {
out.add(new VelocityChannel(wrapped.getHorizontalXY()[i]));
}
return out;
}
/**
* Gets the channel that corresponds to this channelId from the
* ChannelGroup. The Event is needed in case this channel id comes from a
* seismogram that has been rotated to GCP, ie it has R or T as its
* orientation code.
*/
public VelocityChannel getChannel(ChannelId chanId, EventAccessOperations event) {
if (wrapped.getVertical() != null) {
return new VelocityChannel(wrapped.getChannel(chanId, event));
}
return null;
}
public VelocityChannel getRadial(EventAccessOperations event) {
return getRadial(EventUtil.extractOrigin(event).getLocation());
}
public VelocityChannel getRadial(Location eventLoc) {
return new VelocityChannel(wrapped.getRadial(eventLoc));
}
public VelocityChannel getTransverse(EventAccessOperations event) {
return getTransverse(EventUtil.extractOrigin(event).getLocation());
}
public VelocityChannel getTransverse(Location eventLoc) {
return new VelocityChannel(wrapped.getTransverse(eventLoc));
}
public VelocityChannel getChannel1() {
return new VelocityChannel(wrapped.getChannel1());
}
public VelocityChannel getChannel2() {
return new VelocityChannel(wrapped.getChannel2());
}
public VelocityChannel getChannel3() {
return new VelocityChannel(wrapped.getChannel3());
}
public VelocityStation getStation() {
return new VelocityStation(wrapped.getStation());
}
public VelocityNetwork getNetworkAttr() {
return new VelocityNetwork(wrapped.getNetworkAttr());
}
public void insertIntoContext(VelocityContext ctx) {
ctx.put("channelGroup", this);
getChannel1().getSite().insertIntoContext(ctx);
}
public ChannelGroup getChannelGroup() {
return wrapped;
}
ChannelGroup wrapped;
}