Class 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

      Fields 
      Modifier and Type Field Description
      protected java.util.List<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.
      static int DIFFRACT
      Used by addToBranch when the path transmits down through the end of a segment.
      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.
      static int END
      Used by addToBranch for the last segment of a phase.
      static boolean expert
      Enables phases originating in core.
      protected java.util.List<java.lang.Integer> headOrDiffractSeq
      Array of branchSeq positions where a head or diffracted segment occurs.
      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 int maxRecursion  
      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.
      protected double receiverDepth
      The receiver depth within the TauModel that was used to generate this phase.
      protected double refineDistToleranceRadian  
      static int REFLECT_TOPSIDE
      Used by addToBranch when the path reflects off the bottom of the end of a segment, ie v.
      static int REFLECT_UNDERSIDE
      Used by addToBranch when the path reflects off the top of the end of a segment, ie ^.
      protected java.util.List<SeismicPhaseSegment> segmentList
      Description of segments of the phase.
      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

      Constructors 
      Constructor Description
      SeismicPhase​(java.lang.String name, TauModel tMod)  
      SeismicPhase​(java.lang.String name, TauModel tMod, double receiverDepth)  
      SeismicPhase​(java.lang.String name, TauModel tMod, double receiverDepth, boolean debug)  
      SeismicPhase​(java.lang.String name, java.lang.String modelName, double depth)  
    • 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
      • REFLECT_UNDERSIDE

        public static final int REFLECT_UNDERSIDE
        Used by addToBranch when the path reflects off the top of the end of a segment, ie ^.
        See Also:
        Constant Field Values
      • REFLECT_TOPSIDE

        public static final int REFLECT_TOPSIDE
        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
      • DIFFRACT

        public static final int DIFFRACT
        Used by addToBranch when the path transmits down through the end of a segment.
        See Also:
        Constant Field Values
      • END

        public static final int END
        Used by addToBranch for the last segment of a phase.
        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.
      • receiverDepth

        protected double receiverDepth
        The receiver depth within the TauModel that was used to generate this phase. Normally this is 0.0 for a surface stations, but can be different for borehole or scattering calculations.
      • 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.List<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.
      • headOrDiffractSeq

        protected java.util.List<java.lang.Integer> headOrDiffractSeq
        Array of branchSeq positions where a head or diffracted segment occurs.
      • 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.
      • segmentList

        protected java.util.List<SeismicPhaseSegment> segmentList
        Description of segments of the phase.
      • currBranch

        protected transient int currBranch
        temporary branch number so we know where to start add to 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
      • refineDistToleranceRadian

        protected double refineDistToleranceRadian
      • maxRecursion

        protected int maxRecursion
    • Method Detail

      • phasesExistsInModel

        public boolean phasesExistsInModel()
      • getEarliestArrival

        public Arrival getEarliestArrival​(double degrees)
      • getTauModel

        public TauModel getTauModel()
      • getMinDistanceDeg

        public double getMinDistanceDeg()
      • getMinDistance

        public double getMinDistance()
      • getMaxDistanceDeg

        public double getMaxDistanceDeg()
      • 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​(int i)
      • getRayParams

        public double[] getRayParams()
      • getDist

        public double getDist​(int i)
      • getDist

        public double[] getDist()
      • getTime

        public double getTime​(int i)
      • getTime

        public double[] getTime()
      • getTau

        public double getTau​(int i)
      • 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.
      • refineArrival

        public Arrival refineArrival​(int rayNum,
                                     double distRadian,
                                     double distTolRadian,
                                     int maxRecursion)
      • refineArrival

        public Arrival refineArrival​(Arrival leftEstimate,
                                     Arrival rightEstimate,
                                     double searchDist,
                                     double distTolRadian,
                                     int maxRecursion)
      • calcRayParamForTakeoffAngle

        public double calcRayParamForTakeoffAngle​(double takeoffDegree)
      • calcTakeoffAngle

        public double calcTakeoffAngle​(double arrivalRayParam)
      • calcIncidentAngle

        public double calcIncidentAngle​(double arrivalRayParam)
      • 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
      • endActionString

        public static final java.lang.String endActionString​(int endAction)
      • 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.
      • 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)
      • calcBranchMultiplier

        protected int[][] calcBranchMultiplier()
        Calculates how many times the phase passes through a branch, up or down, so that we can just multiply instead of doing the ray calc for each time.
        Returns:
      • 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

        @Deprecated
        public java.util.List<Arrival> calcPierce​(double deg)
                                           throws TauModelException
        Deprecated.
        Use the getPierce() method on each Arrival from calcTime()
        Calculates the "pierce points" for the arrivals stored in arrivals. The pierce points are stored within each arrival object.
        Throws:
        TauModelException
      • calcPierce

        @Deprecated
        public Arrival calcPierce​(Arrival currArrival)
        Deprecated.
        Use the getPierce() method on each Arrival from calcTime()
        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
      • calcPierceTimeDist

        protected java.util.List<TimeDist> calcPierceTimeDist​(Arrival currArrival)
      • calcPath

        @Deprecated
        public java.util.List<Arrival> calcPath​(double deg)
        Deprecated.
        Use the getPath() method on each Arrival from calcTime()
        calculates the paths this phase takes through the earth model.
      • calcPath

        @Deprecated
        public Arrival calcPath​(Arrival currArrival)
        Deprecated.
        use the getPath() method on the arrival.
        Parameters:
        currArrival -
        Returns:
      • calcPathTimeDist

        protected java.util.List<TimeDist> calcPathTimeDist​(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)
      • describe

        public java.lang.String describe()
      • 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)