edu.sc.seis.TauP
Class SeismicPhase

java.lang.Object
  extended by edu.sc.seis.TauP.SeismicPhase
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable

public class SeismicPhase
extends java.lang.Object
implements java.io.Serializable, java.lang.Cloneable

Stores and transforms seismic phase names to and from their corresponding sequence of branches.

See Also:
Serialized Form

Field Summary
protected  java.util.ArrayList<java.lang.Integer> branchSeq
          Array of branch numbers for the given phase.
protected  int currBranch
          temporary branch number so we know where to start add to the branch sequence.
 boolean DEBUG
          Enables debugging output.
protected  double[] dist
          Array of distances corresponding to the ray parameters stored in rayParams.
protected  java.util.ArrayList<java.lang.Boolean> downGoing
          true if the current leg of the phase is down going.
protected  int endAction
          temporary end action so we know what we did at the end of the last section of the branch sequence.
static boolean expert
          Enables phases originating in core.
protected  java.util.ArrayList<java.lang.Integer> legAction
          records the end action for the current leg.
protected  java.util.ArrayList<java.lang.String> legs
          ArrayList containing Strings for each leg.
protected static double maxDiffraction
          The maximum degrees that a Pdiff or Sdiff can diffract along the CMB.
protected  double maxDistance
          The maximum distance that this phase can be theoretically observed.
protected  double maxRayParam
          Maximum ray parameter that exists for this phase.
protected  int maxRayParamIndex
          Index within TauModel.rayParams that corresponds to maxRayParam.
protected static double maxRefraction
          The maximum degrees that a Pn or Sn can refract along the moho.
protected  double minDistance
          The minimum distance that this phase can be theoretically observed.
protected  double minRayParam
          Minimum ray parameter that exists for this phase.
protected  int minRayParamIndex
          Index within TauModel.rayParams that corresponds to minRayParam.
protected  java.lang.String name
          The phase name, ie PKiKP.
protected  java.lang.String puristName
          name with depths corrected to be actuall discontinuities in the model.
static boolean PWAVE
           
protected  double[] rayParams
          Array of possible ray parameters for this phase.
static int REFLECTBOT
          Used by addToBranch when the path reflects off the bottom of the end of a segment, ie v.
static int REFLECTTOP
          Used by addToBranch when the path reflects off the top of the end of a segment, ie ^.
protected  double sourceDepth
          The source depth within the TauModel that was used to generate this phase.
static boolean SWAVE
           
protected  double[] time
          Array of times corresponding to the ray parameters stored in rayParams.
protected  TauModel tMod
          TauModel to generate phase for.
static int TRANSDOWN
          Used by addToBranch when the path transmits down through the end of a segment.
static int TRANSUP
          Used by addToBranch when the path transmits up through the end of a segment.
static int TURN
          Used by addToBranch when the path turns within a segment.
 boolean verbose
          Enables verbose output.
protected  java.util.ArrayList<java.lang.Boolean> waveType
          ArrayList of wave types corresponding to each leg of the phase.
 
Constructor Summary
SeismicPhase(java.lang.String name, java.lang.String modelName, double depth)
           
SeismicPhase(java.lang.String name, TauModel tMod)
           
 
Method Summary
protected  void addToBranch(TauModel tMod, int startBranch, int endBranch, boolean isPWave, int endAction)
           
 Arrival calcPath(Arrival currArrival)
           
 java.util.List<Arrival> calcPath(double deg)
          calculates the paths this phase takes through the earth model.
 Arrival calcPierce(Arrival currArrival)
          Calculates the pierce points for a particular arrival.
 java.util.List<Arrival> calcPierce(double deg)
          Calculates the "pierce points" for the arrivals stored in arrivals.
 java.util.List<Arrival> calcTime(double deg)
          calculates arrival times for this phase, sorted by time.
 int closestBranchToDepth(TauModel tMod, java.lang.String depthString)
          Finds the closest discontinuity to the given depth that can have refletions and phase transformations.
protected  void createPuristName(TauModel tMod)
           
 void dump()
           
 double[] getDist()
           
 boolean[] getDownGoing()
          Direction of the leg between pierce point i and i+1, true is downgoing, false if upgoing
 Arrival getEarliestArrival(double degrees)
           
static Arrival getEarliestArrival(java.util.List<SeismicPhase> phases, double degrees)
           
 int[] getLegAction()
          Leg type i layer interaction, one of TURN, REFLECTTOP, REFLECTBOT, TRANSUP, TRANSDOWN
 java.util.List<java.lang.String> getLegs()
           
static double getMaxDiffraction()
           
 double getMaxDistance()
           
 double getMaxRayParam()
           
 int getMaxRayParamIndex()
           
static double getMaxRefraction()
           
 double getMinDistance()
           
 double getMinRayParam()
           
 int getMinRayParamIndex()
           
 java.lang.String getName()
           
 java.lang.String getPuristName()
           
 double[] getRayParams()
           
 double[] getTau()
           
 TauModel getTauModel()
           
 double[] getTime()
           
 java.lang.String getValidationFailMessage()
           
 boolean[] getWaveType()
          Wave type of the leg between pierce point i and i+1, true is P, false if S
 boolean hasArrivals()
           
protected static java.util.ArrayList<java.lang.String> legPuller(java.lang.String name)
          Tokenizes a phase name into legs, ie PcS becomes 'P'+'c'+'S' while p^410P would become 'p'+'^410'+'P'.
static void main(java.lang.String[] args)
           
protected  void parseName(TauModel tMod)
          Constructs a branch sequence from the given phase name and tau model.
protected  void phaseConversion(TauModel tMod, int fromBranch, int endAction, boolean isPtoS)
          changes maxRayParam and minRayParam whenever there is a phase conversion.
static java.lang.String phaseValidate(java.util.ArrayList<java.lang.String> legs)
          Performs consistency checks on the previously tokenized phase name stored in legs.
static void setMaxDiffraction(double max)
           
static void setMaxRefraction(double max)
           
protected  void sumBranches(TauModel tMod)
          Sums the appropriate branches for this phase.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEBUG

public transient boolean DEBUG
Enables debugging output.


verbose

public transient boolean verbose
Enables verbose output.


expert

public static transient boolean expert
Enables phases originating in core.


tMod

protected TauModel tMod
TauModel to generate phase for.


TURN

public static final int TURN
Used by addToBranch when the path turns within a segment. We assume that no ray will turn downward so turning implies turning from downward to upward, ie U.

See Also:
Constant Field Values

REFLECTTOP

public static final int REFLECTTOP
Used by addToBranch when the path reflects off the top of the end of a segment, ie ^.

See Also:
Constant Field Values

REFLECTBOT

public static final int REFLECTBOT
Used by addToBranch when the path reflects off the bottom of the end of a segment, ie v.

See Also:
Constant Field Values

TRANSUP

public static final int TRANSUP
Used by addToBranch when the path transmits up through the end of a segment.

See Also:
Constant Field Values

TRANSDOWN

public static final int TRANSDOWN
Used by addToBranch when the path transmits down through the end of a segment.

See Also:
Constant Field Values

maxRefraction

protected static double maxRefraction
The maximum degrees that a Pn or Sn can refract along the moho. Note this is not the total distance, only the segment along the moho. The default is 20 degrees.


maxDiffraction

protected static double maxDiffraction
The maximum degrees that a Pdiff or Sdiff can diffract along the CMB. Note this is not the total distance, only the segment along the CMB. The default is 60 degrees.


sourceDepth

protected double sourceDepth
The source depth within the TauModel that was used to generate this phase.


dist

protected double[] dist
Array of distances corresponding to the ray parameters stored in rayParams.


time

protected double[] time
Array of times corresponding to the ray parameters stored in rayParams.


rayParams

protected double[] rayParams
Array of possible ray parameters for this phase.


minRayParam

protected double minRayParam
Minimum ray parameter that exists for this phase.


maxRayParam

protected double maxRayParam
Maximum ray parameter that exists for this phase.


maxRayParamIndex

protected int maxRayParamIndex
Index within TauModel.rayParams that corresponds to maxRayParam. Note that maxRayParamIndex < minRayParamIndex as ray parameter decreases with increasing index.


minRayParamIndex

protected int minRayParamIndex
Index within TauModel.rayParams that corresponds to minRayParam. Note that maxRayParamIndex < minRayParamIndex as ray parameter decreases with increasing index.


minDistance

protected double minDistance
The minimum distance that this phase can be theoretically observed.


maxDistance

protected double maxDistance
The maximum distance that this phase can be theoretically observed.


branchSeq

protected java.util.ArrayList<java.lang.Integer> branchSeq
Array of branch numbers for the given phase. Note that this depends upon both the earth model and the source depth.


name

protected java.lang.String name
The phase name, ie PKiKP.


puristName

protected java.lang.String puristName
name with depths corrected to be actuall discontinuities in the model.


legs

protected java.util.ArrayList<java.lang.String> legs
ArrayList containing Strings for each leg.


currBranch

protected transient int currBranch
temporary branch number so we know where to start add to the branch sequence. Used in addToBranch() and parseName().


endAction

protected transient int endAction
temporary end action so we know what we did at the end of the last section of the branch sequence. Used in addToBranch() and parseName().


legAction

protected java.util.ArrayList<java.lang.Integer> legAction
records the end action for the current leg. Will be one of SeismicPhase.TURN, SeismicPhase.TRANSDOWN, SeismicPhase.TRANSUP, SeismicPhase.REFLECTBOT, or SeismicPhase.REFLECTTOP. This allows a check to make sure the path is correct. Used in addToBranch() and parseName().


downGoing

protected java.util.ArrayList<java.lang.Boolean> downGoing
true if the current leg of the phase is down going. This allows a check to make sure the path is correct. Used in addToBranch() and parseName().


waveType

protected java.util.ArrayList<java.lang.Boolean> waveType
ArrayList of wave types corresponding to each leg of the phase.

See Also:
legs

PWAVE

public static final boolean PWAVE
See Also:
Constant Field Values

SWAVE

public static final boolean SWAVE
See Also:
Constant Field Values
Constructor Detail

SeismicPhase

public SeismicPhase(java.lang.String name,
                    java.lang.String modelName,
                    double depth)
             throws TauModelException
Throws:
TauModelException

SeismicPhase

public SeismicPhase(java.lang.String name,
                    TauModel tMod)
             throws TauModelException
Parameters:
phaseName - String containing a name of the phase.
tMod - Tau model to be used to construct the phase. This should be corrected for the source depth.
Throws:
TauModelException
Method Detail

getEarliestArrival

public Arrival getEarliestArrival(double degrees)

getTauModel

public TauModel getTauModel()

getMinDistance

public double getMinDistance()

getMaxDistance

public double getMaxDistance()

getMaxRayParam

public double getMaxRayParam()

getMinRayParam

public double getMinRayParam()

getMaxRayParamIndex

public int getMaxRayParamIndex()

getMinRayParamIndex

public int getMinRayParamIndex()

getMaxRefraction

public static double getMaxRefraction()

setMaxRefraction

public static void setMaxRefraction(double max)

getMaxDiffraction

public static double getMaxDiffraction()

setMaxDiffraction

public static void setMaxDiffraction(double max)

getName

public java.lang.String getName()

getPuristName

public java.lang.String getPuristName()

getLegs

public java.util.List<java.lang.String> getLegs()

getRayParams

public double[] getRayParams()

getDist

public double[] getDist()

getTime

public double[] getTime()

getTau

public double[] getTau()

getDownGoing

public boolean[] getDownGoing()
Direction of the leg between pierce point i and i+1, true is downgoing, false if upgoing


getWaveType

public boolean[] getWaveType()
Wave type of the leg between pierce point i and i+1, true is P, false if S


getLegAction

public int[] getLegAction()
Leg type i layer interaction, one of TURN, REFLECTTOP, REFLECTBOT, TRANSUP, TRANSDOWN


hasArrivals

public boolean hasArrivals()

calcTime

public java.util.List<Arrival> calcTime(double deg)
calculates arrival times for this phase, sorted by time.

Throws:
NoSuchMatPropException
NoSuchLayerException

phaseConversion

protected void phaseConversion(TauModel tMod,
                               int fromBranch,
                               int endAction,
                               boolean isPtoS)
                        throws TauModelException
changes maxRayParam and minRayParam whenever there is a phase conversion. For instance, SKP needs to change the maxRayParam because there are SKS ray parameters that cannot propagate from the cmb into the mantle as a p wave.

Throws:
TauModelException

addToBranch

protected void addToBranch(TauModel tMod,
                           int startBranch,
                           int endBranch,
                           boolean isPWave,
                           int endAction)
                    throws TauModelException
Throws:
TauModelException

closestBranchToDepth

public int closestBranchToDepth(TauModel tMod,
                                java.lang.String depthString)
Finds the closest discontinuity to the given depth that can have refletions and phase transformations.

Returns:
the branch number with the closest top depth.

parseName

protected void parseName(TauModel tMod)
                  throws TauModelException
Constructs a branch sequence from the given phase name and tau model.

Throws:
TauModelException

legPuller

protected static java.util.ArrayList<java.lang.String> legPuller(java.lang.String name)
                                                          throws TauModelException
Tokenizes a phase name into legs, ie PcS becomes 'P'+'c'+'S' while p^410P would become 'p'+'^410'+'P'. Once a phase name has been broken into tokens we can begin to construct the sequence of branches to which it corresponds. Only minor error checking is done at this point, for instance PIP generates an exception but ^410 doesn't. It also appends "END" as the last leg.

Throws:
TauModelException - if the phase name cannot be tokenized.

createPuristName

protected void createPuristName(TauModel tMod)

sumBranches

protected void sumBranches(TauModel tMod)
                    throws TauModelException
Sums the appropriate branches for this phase.

Throws:
TauModelException - if the topDepth of the high slowness zone is not contained within the TauModel. This should never happen and would indicate an invalid TauModel.

calcPierce

public java.util.List<Arrival> calcPierce(double deg)
                                   throws TauModelException
Calculates the "pierce points" for the arrivals stored in arrivals. The pierce points are stored within each arrival object.

Throws:
TauModelException

calcPierce

public Arrival calcPierce(Arrival currArrival)
Calculates the pierce points for a particular arrival. The returned arrival is the same as the input arguement but now has the pierce points filled in.

Parameters:
currArrival -
Returns:
same arrival with pierce points

calcPath

public java.util.List<Arrival> calcPath(double deg)
calculates the paths this phase takes through the earth model.


calcPath

public Arrival calcPath(Arrival currArrival)

getValidationFailMessage

public java.lang.String getValidationFailMessage()

phaseValidate

public static java.lang.String phaseValidate(java.util.ArrayList<java.lang.String> legs)
Performs consistency checks on the previously tokenized phase name stored in legs. Returns null if all is ok, a message if there is a problem.


getEarliestArrival

public static Arrival getEarliestArrival(java.util.List<SeismicPhase> phases,
                                         double degrees)

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

dump

public void dump()

main

public static void main(java.lang.String[] args)