Abstract We introduce a Python package for computing focal mechanism solutions. This algorithm, which we refer to as SKHASH, is largely based on the HASH algorithm originally written in Fortran over 20 yr ago. HASH innovated the use of suites of solutions, spanning the expected errors in polarities and takeoff angles, to estimate focal mechanism uncertainty. SKHASH benefits from new features with flexible input formats and allows users to take advantage of recent advances in constraining focal mechanisms for small magnitude or poorly recorded earthquakes. The 3D locations of earthquakes and the velocity models used are varied when finding acceptable solutions. As a result, source–receiver azimuths are reflective of errors from the earthquake locations and velocity models, in addition to the takeoff angles. Users can consider weighted P-wave first-motion polarities derived from traditional or machine-learning picks, cross-correlation consensus, and/or imputation techniques using SKHASH. Focal mechanism solutions can also be further constrained using traditional, machine learning, and/or cross-correlation consensus S/P amplitude ratios. With improved reporting of individual and collective P polarity and S/P amplitude misfits, users can better evaluate the success of the solutions and the quality of the measurements. The reporting also makes it easier to identify potential issues with metadata, including incorrectly reported station polarity reversals. In addition, by leveraging vectorized operations, taking advantage of an efficient backend Python C Application Programming Interface, and the use of a parallel environment, the Python SKHASH routine may compute mechanisms quicker than the HASH routine.
Read full abstract